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实现的省市区级联无ajax
Sep 24 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
以BootStrap Tab为例写一个前端组件
Jul 25 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
js数组去重的方法总结
Jan 18 Javascript
小程序实现新用户判断并跳转激活的方法
May 20 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
js实现3D旋转相册
Aug 02 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 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中文工具类ChineseUtil
2018/02/23 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
php实现图片压缩处理
2020/09/09 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
Python help()函数用法详解
2014/03/11 Python
Python深度优先算法生成迷宫
2018/01/22 Python
django允许外部访问的实例讲解
2018/05/14 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
库房保管员岗位职责
2014/04/07 职场文书
幼儿教师求职信
2014/05/24 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏