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 相关文章推荐
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
My Desktop :) 桌面式代码
Dec 29 Javascript
JavaScript iframe的相互操作浅析
Oct 14 Javascript
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
详谈javascript中的cookie
Jun 03 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 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中生成UUID自定义函数分享
2015/06/10 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
python daemon守护进程实现
2016/08/27 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python socket聊天脚本代码实例
2020/01/02 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
总经理司机岗位职责
2014/02/06 职场文书
网页美工求职信
2014/02/15 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
pandas中pd.groupby()的用法详解
2022/06/16 Python