JS函數(shù)內(nèi)部屬性之a(chǎn)rguments和this實(shí)例解析
在函數(shù)內(nèi)部,有兩個特殊的對象:arguments和this。
1、arguments
arguments是一個類數(shù)組對象。包含著傳入函數(shù)中的所有參數(shù)。但這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數(shù)。
經(jīng)典案例:階乘函數(shù)
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * factorial(num-1);
}
}
定義階乘函數(shù)一般都要用到遞歸算法,如上所示,但你會發(fā)現(xiàn),這個函數(shù)的執(zhí)行與函數(shù)名factorial緊緊耦合在了一起,為解決這個問題,我們可以使用arguments.callee。
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num-1);
}
}
我們重寫之后,factorial()函數(shù)里沒有引用函數(shù)名factorial。這樣無論引用函數(shù)時使用的是什么名字,都可以保證正常完成遞歸調(diào)用。例如:
var trueFac = factorial;
factorial = function(){
return 0;
}
console.log(trueFac(5)); // 120
console.log(factorial(5)); // 0
2、this
函數(shù)內(nèi)部的另一個對象是this,this引用的是函數(shù)執(zhí)行的環(huán)境對象(當(dāng)在網(wǎng)頁的全局作用域中調(diào)用函數(shù)時,this對象引用的就是window)。
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); // "red"
o.sayColor = sayColor;
o.sayColor(); // "blue"
在上面這個函數(shù)sayColor()是在全局作用域中定義的,它引用了this對象。由于在調(diào)用函數(shù)之前,this的值并不確定,因此this可能會在代碼執(zhí)行過程中引用不同的對象。
當(dāng)在全局作用域中調(diào)用sayColor()時,this引用的時全局對象window;換句話說,對this.color求值會轉(zhuǎn)換成對window.color求值,于是結(jié)果就返回了"red"。而當(dāng)把這個函數(shù)賦給對象o并調(diào)用o.sayColor()時,this引用的是對象o,因此對this.color求值會轉(zhuǎn)換成對o.color求值,所以返回“blue”。
函數(shù)的名字僅僅是一個包含指針的變量。
總結(jié)
以上所述是小編給大家介紹的JS函數(shù)內(nèi)部屬性之a(chǎn)rguments和this實(shí)例解析,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
javascript oop開發(fā)滑動(slide)菜單控件
這里因?yàn)槭茄菔舅宰孒TML CSS盡量的簡化,另外使用jquery的 fn.slideUp fn.slideDown 實(shí)現(xiàn)起來會更容易不過我作為一個專業(yè)的開發(fā)者多了解些原生的JS對技術(shù)的提高還是很有幫助。2010-08-08
詳解CocosCreator項(xiàng)目結(jié)構(gòu)機(jī)制
這篇文章主要介紹了詳解CocosCreator項(xiàng)目結(jié)構(gòu)機(jī)制,只有了解這些機(jī)制后,才能更好的進(jìn)行項(xiàng)目開發(fā),避免潛在錯誤,并且快速的除錯2021-04-04
JavaScript中保留小數(shù)點(diǎn)后N位方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了JavaScript中保留小數(shù)點(diǎn)后N位的幾個常用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06
基于JavaScript的數(shù)據(jù)結(jié)構(gòu)隊(duì)列動畫實(shí)現(xiàn)示例解析
這篇文章主要介紹了基于JavaScript的數(shù)據(jù)結(jié)構(gòu)隊(duì)列動畫實(shí)現(xiàn)示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
微信小程序MoxB實(shí)現(xiàn)全局狀態(tài)管理流程詳解
這篇文章主要介紹了微信小程序使用MoxB實(shí)現(xiàn)全局狀態(tài)管理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11
event對象獲取方法總結(jié)在google瀏覽器下測試
Event 對象代表事件的狀態(tài),比如事件在其中發(fā)生的元素、鍵盤按鍵的狀態(tài)、鼠標(biāo)的位置、鼠標(biāo)按鈕的狀態(tài),Event對象的獲取方法如下,感興趣的朋友可以參考下2013-11-11

