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 相关文章推荐
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
jquery last-child 列表最后一项的样式
Jan 22 Javascript
jQuery中使用了document和window哪些属性和方法小结
Sep 13 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
jquery.ajax之beforeSend方法使用介绍
Dec 08 Javascript
javasript实现密码的隐藏与显示
May 08 Javascript
jquery 中ajax执行的优先级
Jun 22 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
微信小程序开发中的疑问解答汇总
Jul 03 Javascript
jQuery+ajax实现用户登录验证
Sep 13 jQuery
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 远程关机操作的代码
2008/12/05 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
javascript常用方法汇总
2014/12/02 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
如何使用angularJs
2017/05/08 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
浅谈python中set使用
2016/06/30 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python实现矩阵打印
2019/03/02 Python
python3实现微型的web服务器
2019/09/03 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
python 实现list或string按指定分段
2019/12/25 Python
python批量修改xml属性的实现方式
2020/03/05 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
销售文员岗位职责
2013/11/29 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
校园演讲稿汇总
2014/05/21 职场文书
财政局长个人总结
2015/03/04 职场文书
何玥事迹观后感
2015/06/16 职场文书
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技