callee
首先说一下argument;
arguments 是类数组对象,是一种特殊的对象,里面装有函数的实参列表,它的属性名是按照传入参数的序列来的。
大家都知道,对象都会有属性,那么callee 就是 arguments 的一个属性。
arguments.callee 指的是函数的引用(也就是函数自己)。
//eg:
function test(){
console.log(arguments.callee);
}
test();
结果:
// 计算100!
var num = (function (n){
if(n == 1){
return 1;
}
return n*arguments.callee(n-1);
}(100))
// 立即执行函数一般没有函数名,(因为执行后立即销毁,有函数名也没啥用)
// 所以要想调用出原型必须的用 arguments.callee
caller
caller是函数的属性。它指向函数所调用的环境。
function test(){
demo();
}
function demo(){
console.log(demo.caller);
}
test();
打印结果:
在es5.0 的标准模式下不能用callee 和 caller