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 相关文章推荐
字符串的replace方法应用浅析
Dec 06 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
Jan 15 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
jQuery设置与获取HTML,文本和值的简单实例
Feb 26 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
jQuery实现的网页竖向菜单效果代码
Aug 26 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 Javascript
如何用JS实现简单的数据监听
May 06 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获取网站域名和地址的代码
2008/08/17 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
学习ExtJS Column布局
2009/10/08 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
python复制文件代码实现
2013/12/23 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python简单商城购物车实例代码
2018/03/15 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
python打开文件的方式有哪些
2020/06/29 Python
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
幼儿园托班开学寄语
2014/01/18 职场文书
网管求职信
2014/03/03 职场文书
国培远程培训感言
2014/03/08 职场文书
财务部总监岗位职责
2014/03/12 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
小学六年级毕业感言
2015/07/30 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
Python实现信息管理系统
2022/06/05 Python