JS函數(shù)內(nèi)部屬性之a(chǎn)rguments和this實(shí)例解析
在函數(shù)內(nèi)部,有兩個(gè)特殊的對象:arguments和this。
1、arguments
arguments是一個(gè)類數(shù)組對象。包含著傳入函數(shù)中的所有參數(shù)。但這個(gè)對象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對象的函數(shù)。
經(jīng)典案例:階乘函數(shù)
function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num-1); } }
定義階乘函數(shù)一般都要用到遞歸算法,如上所示,但你會發(fā)現(xiàn),這個(gè)函數(shù)的執(zhí)行與函數(shù)名factorial緊緊耦合在了一起,為解決這個(gè)問題,我們可以使用arguments.callee。
function factorial(num){ if(num <= 1){ return 1; }else{ return num * arguments.callee(num-1); } }
我們重寫之后,factorial()函數(shù)里沒有引用函數(shù)名factorial。這樣無論引用函數(shù)時(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)部的另一個(gè)對象是this,this引用的是函數(shù)執(zhí)行的環(huán)境對象(當(dāng)在網(wǎng)頁的全局作用域中調(diào)用函數(shù)時(shí),this對象引用的就是window)。
window.color = "red"; var o = { color: "blue" }; function sayColor(){ alert(this.color); } sayColor(); // "red" o.sayColor = sayColor; o.sayColor(); // "blue"
在上面這個(gè)函數(shù)sayColor()是在全局作用域中定義的,它引用了this對象。由于在調(diào)用函數(shù)之前,this的值并不確定,因此this可能會在代碼執(zhí)行過程中引用不同的對象。
當(dāng)在全局作用域中調(diào)用sayColor()時(shí),this引用的時(shí)全局對象window;換句話說,對this.color求值會轉(zhuǎn)換成對window.color求值,于是結(jié)果就返回了"red"。而當(dāng)把這個(gè)函數(shù)賦給對象o并調(diào)用o.sayColor()時(shí),this引用的是對象o,因此對this.color求值會轉(zhuǎn)換成對o.color求值,所以返回“blue”。
函數(shù)的名字僅僅是一個(gè)包含指針的變量。
總結(jié)
以上所述是小編給大家介紹的JS函數(shù)內(nèi)部屬性之a(chǎn)rguments和this實(shí)例解析,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時(shí)回復(fù)大家的!
相關(guān)文章
js事件監(jiān)聽機(jī)制(事件捕獲)總結(jié)
添加事件的js方法也很多,有直接加到頁面結(jié)構(gòu)上的,有使用一些js事件監(jiān)聽的方法,由于各個(gè)瀏覽器對事件冒泡事件監(jiān)聽的機(jī)制不同2014-08-08多個(gè)上傳文件用js驗(yàn)證文件的格式和大小的方法(推薦)
下面小編就為大家?guī)硪黄鄠€(gè)上傳文件用js驗(yàn)證文件的格式和大小的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03JS報(bào)錯Uncaught?TypeError:?XXX?is?not?a?function的解決方法
這篇文章主要給大家介紹了關(guān)于JS報(bào)錯Uncaught?TypeError:?XXX?is?not?a?function的解決方法,本來好好的,突然就出現(xiàn)的錯誤,不過這并不是什么難解決的錯誤,需要的朋友可以參考下2023-08-08JavaScript-html標(biāo)題滾動效果的簡單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狫avaScript-html標(biāo)題滾動效果的簡單實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09拖動Html元素集合 Drag and Drop any item
拖動Html元素集合 Drag and Drop any item...2006-12-12微信小程序?qū)崿F(xiàn)頂部普通選項(xiàng)卡效果(非swiper)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)頂部普通選項(xiàng)卡效果,非swiper,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08JS 實(shí)現(xiàn)Div向上浮動的實(shí)現(xiàn)代碼
用js實(shí)現(xiàn)的可以讓div慢慢上升效果實(shí)現(xiàn)代碼,喜歡的朋友可以參考下2012-10-10