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
是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)
先来个例子吧
function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容
我们来解释一下吧,首先函数b的属性caller
调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出function a(){ b();};