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 相关文章推荐
在Windows上安装Node.js模块的方法
Sep 25 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
js简单判断移动端系统的方法
Feb 25 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
使用veloticy-ui生成文字动画效果
Feb 08 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
vue实现重置表单信息为空的方法
Sep 29 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
用js编写留言板
Mar 17 Javascript
Javascript var变量删除原理及实现
Aug 26 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 Javascript
使用typescript快速开发一个cli的实现示例
Dec 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
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
详解Python 解压缩文件
2019/04/09 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
自我鉴定书范文
2013/10/02 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
临床医师个人自我评价
2014/04/06 职场文书
大学生助学金感谢信
2015/01/21 职场文书
市场部岗位职责
2015/02/12 职场文书
检察院起诉意见书
2015/05/20 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android