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 相关文章推荐
在JS中最常看到切最容易迷惑的语法(转)
Oct 29 Javascript
javascript中attribute和property的区别详解
Jun 05 Javascript
JavaScript调用客户端Java程序的方法
Jul 27 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
解决ie img标签内存泄漏的问题
Oct 13 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
express 项目分层实践详解
Dec 10 Javascript
JS实现数组去重及数组内对象去重功能示例
Feb 02 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
解决vant-UI库修改样式无效的问题
Nov 03 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动态生成虚拟现实VRML网页
2006/10/09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
php生成图片验证码
2015/06/09 PHP
PHP模板解析类实例
2015/07/09 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
加拿大探亲邀请信
2014/01/28 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
活动费用申请报告
2015/05/15 职场文书
感谢信
2019/04/11 职场文书
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android