淺談javascript 函數(shù)內(nèi)部屬性
在函數(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ù)例子:
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);
}
}
使用第一種方式是沒(méi)有錯(cuò)的,但是耦合性太高,不太好,函數(shù)名改變之后,內(nèi)部的函數(shù)名也要改變
第二種方式就是低耦合的做法,無(wú)論函數(shù)名怎么改變都不會(huì)影響函數(shù)執(zhí)行。
this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象,或者也可以說(shuō)是this值
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
function outer() {
innter();
}
function innter(){
//alert(innter.caller);//耦合性太高
alert(arguments.callee.caller);
}
outer();
以上就是javascript函數(shù)內(nèi)部屬性的全部?jī)?nèi)容了,希望小伙伴們能夠喜歡
相關(guān)文章
document.getElementBy("id")與$("#id")有什么區(qū)
有朋友問(wèn)document.getElementBy("id")與$("#id")的區(qū)別,其實(shí)第一個(gè)就是js中獲取對(duì)象的方法, 第二個(gè)是通過(guò)自定義函數(shù)方便調(diào)用,而第三個(gè)是jquery中獲取id對(duì)象的方法2013-09-09
有關(guān)javascript的性能優(yōu)化 (repaint和reflow)
本篇文章,小編將為大家介紹,有關(guān)javascript的性能優(yōu)化(repaint和reflow),有需要的朋友可以參考一下2013-04-04
表單元素的submit()方法和onsubmit事件應(yīng)用概述
表單元素?fù)碛衧ubmit方法,同時(shí)也具有onsubmit事件句柄,用于監(jiān)聽(tīng)表單提交。可以使用elemForm.submit();方法觸發(fā)表單提交,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02
淺析js中2個(gè)等號(hào)與3個(gè)等號(hào)的區(qū)別
這篇文章介紹了js中2個(gè)等號(hào)與3個(gè)等號(hào)的區(qū)別,有需要的朋友可以參考一下2013-08-08
使用js聲明數(shù)組,對(duì)象在jsp頁(yè)面中(獲得ajax得到j(luò)son數(shù)據(jù))
使用js聲明數(shù)組,對(duì)象在jsp頁(yè)面中(獲得ajax得到j(luò)son數(shù)據(jù))。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11

