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制作的幻灯片图集效果打包下载
Feb 12 Javascript
javascript之querySelector和querySelectorAll使用说明
Oct 09 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
Feb 16 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
Jul 18 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
C# Assembly类访问程序集信息
2009/06/13 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
javascript类型转换示例
2014/04/29 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
Python 正则表达式实现计算器功能
2017/04/29 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
使用Python实现批量ping操作方法
2020/05/06 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
六十大寿答谢词
2014/01/12 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
文明演讲稿范文
2014/05/12 职场文书
培训讲师开场白
2015/06/01 职场文书
环保宣传语大全
2015/07/13 职场文书
推广普通话主题班会
2015/08/17 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python