在函數(shù)內(nèi)部有兩個(gè)特殊的屬性:arguments 和 this。arguments 是一個(gè)類數(shù)組對(duì)象,包含傳入的所有參數(shù),
但是這個(gè)對(duì)象還有一個(gè)名叫 callee 的屬性,該屬性是一個(gè)指針,指向擁有這個(gè) arguments 對(duì)象的函數(shù)。 請(qǐng)看經(jīng)典的階乘函數(shù)例子:
[js] view plaincopy
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);
}
}
使用第一種方式是沒有錯(cuò)的,但是耦合性太高,不太好,函數(shù)名改變之后,內(nèi)部的函數(shù)名也要改變
第二種方式就是低耦合的做法,無論函數(shù)名怎么改變都不會(huì)影響函數(shù)執(zhí)行。 this 引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象,或者也可以說是 this 值
[js] view plaincopy
window.color = "red";
var o = {color: "blue"};
function sayColor() {
alert(this.color);
}
sayColor();//red
o.sayColor = sayColor;
o.sayColor();//blue
caller 屬性,保存著調(diào)用當(dāng)前函數(shù)的函數(shù)的引用,如果是在全局作用域中調(diào)用當(dāng)前函數(shù),它的值為 Null
[js] view plaincopy
function outer() {
innter();
}
function innter(){
//alert(innter.caller);//耦合性太高
alert(arguments.callee.caller);
}
outer();
以上就是 javascript 函數(shù)內(nèi)部屬性的全部內(nèi)容了,希望小伙伴們能夠喜歡