javascript中callee与caller的区别分析


callee

callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数
首先我们来写个阶成函数:

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};

从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试

function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};

我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。

caller

caller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)

先来个例子吧

function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容

我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};

那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢

function b(){
alert(b.caller);
};

从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b
前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:

(function a(){
b();
})();

function b(){
alert(arguments.callee.caller);
};

从代码中可以看出我们用arguments.callee代替了b函数,所以解决了一下麻烦。。。。。

以上所述就是本文的全部内容了,希望大家能够喜欢。



相关阅读:
JavaScript中解析JSON数据的三种方法
使用HTML5中的contentEditable来将多行文本自动增高
教你如何在windows与linux系统中设置MySQL数据库名、表名大小写敏感
Oracle 数据库针对表主键列并发导致行级锁简单演示
Javascript实现简单的富文本编辑器附演示
jquery实现页面常用的返回顶部效果
C语言连续子向量的最大和及时间度量实例
CSS中的各种选择器与样式优先级小结
深入解析C++的循环链表与双向链表设计的API实现
CSS定义超链接样式的顺序及四个伪类的用法示例介绍
sql server中查找特定类别的列的写法
ASP.NET验证码实现(附源码)
Win10预览版10525出现错误代码0x8007232B的原因
JavaScript实现当网页加载完成后执行指定函数的方法
快速导航

Copyright © 2016 phpStudy |