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 相关文章推荐
js控制页面控件隐藏显示的两种方法介绍
Oct 09 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
初探js和简单隐藏效果的实例
Nov 23 Javascript
基于js 各种排序方法和sort方法的区别(详解)
Jan 03 Javascript
VUE路由动态加载实例代码讲解
Aug 26 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
Vue.js watch监视属性知识点总结
Nov 11 Javascript
微信小程序canvas截取任意形状的实现代码
Jan 13 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 Smarty 字符比较代码
2011/02/27 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
巴基斯坦购物网站:Goto
2019/03/11 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
自我评价范文
2013/12/22 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
党支部承诺书范文
2014/03/28 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
统计学教授推荐信
2014/09/18 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
培训心得体会怎么写
2016/01/25 职场文书