在函數內部有兩個特殊的屬性:arguments 和 this。arguments是一個類數組對象,包含傳入的所有參數,
但是這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。
請看經典的階乘函數例子:
代碼如下:
function Factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * Factorial(num - 1);
}
}
function Factorial(num) {
if (num <= 1) {
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函數內部屬性的全部內容了,希望小伙伴們能夠喜歡