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文字列表向上滚动的代码
Nov 13 Javascript
基于jQuery实现在线选座之高铁版
Aug 24 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
js实现HashTable(哈希表)的实例分析
Nov 21 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
Jan 05 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
jQuery上传插件webupload使用方法
Aug 01 jQuery
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
Jun 17 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
Jan 07 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
pandas DataFrame创建方法的方式
2019/08/02 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
巴西网上药房:onofre
2016/11/21 全球购物
全球性的女装店:storets
2019/06/12 全球购物
电信专业毕业生推荐信
2013/11/18 职场文书
教师现实表现材料
2014/02/14 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
二十年同学聚会感言
2015/07/30 职场文书
领导干部学习心得体会
2016/01/23 职场文书
辞职申请书范本
2019/05/20 职场文书