arguments是一个类数组对象,包含这传入函数中的所有参数。
this 简单理解就是调用当前函数的对象
arguments.callee ,这个属性是一个指针,指向拥有这个arguments对象的函数
请看一个递归函数
function factorial(num){
if (num <= 1) {
return 1;
} else {
return num * factotial(num-1)
}
}
这是一个和经典的递归算法。但是这个函数和factoria紧紧耦合在一起,当然如果函数名不变是没问题。
不过我们可以更好的解耦,可以这样写
function factorial(num){
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num-1)
}
}
arguments.callee.caller 保存着调用当前函数的的函数引用(只有再嵌套函数中才有值,如果再全局作用域中调用则是null)
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer(); //显示outer的源码
同样可以写成
function outer(){
inner();
}
function inner(){
alert(arguments.callee.caller);
}
outer();