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 相关文章推荐
web基于浏览器的本地存储方法应用
Nov 27 Javascript
javascript无刷新评论实现方法
May 13 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
Node.js 条形码识别程序构建思路详解
Feb 14 Javascript
javascript的理解及经典案例分析
May 20 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 Javascript
JavaScript 继承详解(五)
Oct 11 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
微信小程序间使用navigator跳转传值问题实例分析
Mar 27 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
laravel 4安装及入门图文教程
2014/10/29 PHP
php源码的使用方法讲解
2019/09/26 PHP
document.all与WEB标准
2020/05/13 Javascript
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
javascript动画浅析
2012/08/30 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python实现对adb命令封装
2020/03/06 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
建筑工程专业学生的自我评价
2013/12/25 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
大专会计自我鉴定
2014/02/06 职场文书
学习教师法的心得体会
2014/09/03 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python