在函數內部有兩個特殊的特性:arguments 和 this。 arguments是一個類別數組對象,包含傳入的所有參數,
但是這個物件還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments物件的函數。
請看經典的階乘函數範例:
function Factorial(num) {
if (num
return 1;
} else {
return num * Factorial(num - 1);
}
}
function Factorial(num) {
if (num
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
使用第一種方式是沒有錯的,但是耦合性太高,不太好,函數名改變之後,內部的函數名稱也要改變
第二種方式是低耦合的做法,無論函數名稱怎麼改變都不會影響函數執行。
this引用的是函資料以執行的環境對象,或也可說是this值
window.color = "red";
var o = {color: "blue"};
function sayColor() {
alert(this.color);
}
sayColor();//red
o.sayColor = sayColor;
o.sayColor();//blue
caller屬性,保存呼叫目前函數的函數的引用,如果是在全域作用域中呼叫目前函數,它的值為Null
function outer() {
innter();
}
function innter(){
//alert(innter.caller);//耦合度太高
alert(arguments.callee.caller);
}
outer();
以上就是javascript函數內部屬性的全部內容了,希望小夥伴們能夠喜歡