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 1.2.x 升? 1.3.x 注意事项
May 06 Javascript
js读取csv文件并使用json显示出来
Jan 09 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
浅析jQuery Mobile的初始化事件
Dec 03 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
清除js缓存的多种方法总结
Dec 09 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
vue使用Proxy实现双向绑定的方法示例
Mar 20 Javascript
layui form.render('select', 'test2') 更新渲染的方法
Sep 27 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 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判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
js操作二级联动实现代码
2010/07/27 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
python自动安装pip
2014/04/24 Python
python中实现php的var_dump函数功能
2015/01/21 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python画图常规设置方式
2020/03/05 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
资深地理教师自我评价
2013/09/21 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
见习报告格式范文
2014/11/08 职场文书
优秀班组申报材料
2014/12/25 职场文书