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 相关文章推荐
use jscript with List Proxy Server Information
Jun 11 Javascript
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
js查看一个函数的执行时间实例代码
Sep 12 Javascript
详解react、redux、react-redux之间的关系
Apr 11 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
Jul 10 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
react高阶组件添加和删除props
Apr 26 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
jQuery大于号(>)选择器的作用解释
2015/01/13 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
JS中的phototype详解
2017/02/04 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
深入浅析python继承问题
2016/05/29 Python
python中的itertools的使用详解
2020/01/13 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
服装厂厂长岗位职责
2013/12/27 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
初三学生评语大全
2014/04/24 职场文书
毕业生个人总结
2015/02/28 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers