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的10个怪癖和秘密分享
Aug 28 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
vue路由守卫,限制前端页面访问权限的例子
Nov 11 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 Javascript
Node.js文本文件BOM头的去除方法
Nov 22 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
建立动态的WML站点(一)
2006/10/09 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python实现五子棋小游戏
2020/03/25 Python
python中如何设置代码自动提示
2020/07/15 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
实习自我鉴定范文
2013/10/30 职场文书
药学专业个人自我评价
2013/11/11 职场文书
车贷收入证明范本
2014/09/14 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
高中团支书竞选稿
2015/11/21 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
Java基础-封装和继承
2021/07/02 Java/Android
Python常遇到的错误和异常
2021/11/02 Python
JS setTimeout与setInterval的区别
2022/04/20 Javascript