js中的caller和callee属性介绍和例子


Posted in Javascript onJune 07, 2014

一、caller

返回一个对函数的引用,该函数调用了当前函数。

functionName.caller

functionName 对象是所执行函数的名称。

说明

对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。

下面的例子说明了 caller 属性的用法:

function callerDemo() {
    if ( arguments.caller) {
        var a= callerDemo.caller.toString();
        alert(a);
    } else {
        alert("this is a top function");
    }
}
function handleCaller() {
    callerDemo();
}
handleCaller();
function calleeDemo() {
     alert(arguments.callee);
}
calleeDemo();

二、callee

返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。

[function.]arguments.callee
可选项 function 参数是当前正在执行的 Function 对象的名称。

说明

callee 属性的初始值就是正被执行的 Function 对象。

callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。

示例

//callee可以打印其本身
function calleeDemo() {
     alert(arguments.callee);
}
//用于验证参数
function calleeLengthDemo(arg1, arg2) {
    if (arguments.length==arguments.callee.length) {
         window.alert("验证形参和实参长度正确!");
        return;
     } else {
         alert("实参长度:" +arguments.length);
         alert("形参长度: " +arguments.callee.length);
     }
}
//递归计算
var sum = function(n){
  if (n < = 0)                       
  return 1;
  else
    return n +arguments.callee(n - 1)
}

比较一般的递归函数:
var sum = function(n){
    if (1==n) return 1;
else return n + sum (n-1);

调用时:alert(sum(100));

其中函数内部包含了对sum自身的引用,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用
一个全局变量,不能很好的体现出是调用自身,这时使用callee会是一个比较好的方法。

Javascript 相关文章推荐
基于jquery的inputlimiter 实现字数限制功能
May 30 Javascript
js静态方法与实例方法分析
Jul 04 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
可插入图片的TEXT文本框
Dec 27 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 Javascript
layer 刷新某个页面的实现方法
Sep 05 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 #Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 #Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 #Javascript
jQuery的缓存机制浅析
Jun 07 #Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 #Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 #Javascript
判断iframe里的页面是否加载完成
Jun 06 #Javascript
You might like
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php实现的递归提成方案实例
2015/11/14 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
Gird事件机制初级读本
2007/03/10 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
幼儿园教研活动方案
2014/01/19 职场文书
综艺节目策划方案
2014/06/13 职场文书
小学亲子活动总结
2014/07/01 职场文书
个人委托书
2014/07/31 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
实习单位意见
2015/06/04 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python