javascript中callee与caller的用法和应用场景


Posted in Javascript onDecember 08, 2010

caller :
functionName.caller 返回调用者。

看看下面的函数,大家可以复制到VS中执行下

function caller() { 
if (caller.caller) { 
alert(caller.caller.toString()); 
} else { 
alert("函数直接执行"); 
} 
} 
function handleCaller() { 
caller(); 
} 
handleCaller(); 
caller();

大家会发现第一个alert会弹出调用caller函数的调用者handleCaller,而第二个alert由于没有在其他函数体内调用,所以caller为null,就执行了 alert("函数直接执行");

callee:

返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文.
callee是arguments 的一个属性成员,它表示对函数对象本身的引用,这有利于匿名

函数的递归或者保证函数的封装性。 下面一段代码先说明callee的用法,实例代码摘自网上

function calleeLengthDemo(arg1, arg2) { 
alert(arguments.callee.toString()); 
if (arguments.length == arguments.callee.length) { 
window.alert("验证形参和实参长度正确!"); 
return; 
} else { 
alert("实参长度:" + arguments.length); 
alert("形参长度: " + arguments.callee.length); 
} 
} 
calleeLengthDemo(1);

第一个消息框弹出calleeLengthDemo函数本身,这说明callee就是函数本身对象的引用。callee还有个非常有用的应用就是用来判断实际参数跟行参是否一致。上面的代码第一个消息框会弹出实际参数的长度为1,形式参数也就是函数本身的参数长度为2.

应用场景:
callee的应用场景一般用于匿名函数
大家看下下面一段代码 摘自网络

var fn=function(n){ 
if(n>0) return n+fn(n-1); 
return 0; 
} 
alert(fn(10))

函数内部包含了对自身的引用,函数名仅仅是一个变量名,在函数内部调用即相当于调用
一个全局变量,不能很好的体现出是调用自身,这时使用callee会是一个比较好的方法
var fn=(function(n){ 
if(n>0) return n+arguments.callee(n-1); 
return 0; 
})(10); 
alert(fn)

这样就让代码更加简练。又防止了全局变量的污染。

caller的应用场景 主要用于察看函数本身被哪个函数调用。

Javascript 相关文章推荐
jQuery 技巧大全(新手入门篇)
May 12 Javascript
JavaScript DOM学习第一章 W3C DOM简介
Feb 19 Javascript
jquery uaMatch源代码
Feb 14 Javascript
JS中操作JSON总结
Dec 06 Javascript
原生javascript实现图片弹窗交互效果
Jan 12 Javascript
浅谈jQuery中ajaxPrefilter的应用
Aug 01 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
详解vue中使用微信jssdk
Apr 19 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
js下通过prototype扩展实现indexOf的代码
Dec 08 #Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 #Javascript
jquery蒙版控件实现代码
Dec 08 #Javascript
基于JQuery制作的产品广告效果
Dec 08 #Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
Dec 08 #Javascript
写js时遇到的一些小问题
Dec 06 #Javascript
javascript定义函数的方法
Dec 06 #Javascript
You might like
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
用来给图片加水印的PHP类
2008/04/09 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
浅谈PHP封装CURL
2019/03/06 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Python探索之修改Python搜索路径
2017/10/25 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
党员个人思想汇报
2013/12/28 职场文书
新娘父亲婚礼致辞
2014/01/16 职场文书
高一地理教学反思
2014/01/18 职场文书
监察建议书格式
2014/05/19 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript