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();