JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法實(shí)例詳解
函數(shù)是由事件驅(qū)動(dòng)的或者當(dāng)它被調(diào)用時(shí)執(zhí)行的可重復(fù)使用的代碼塊。
函數(shù)是對(duì)象,有自己的屬性和方法 。首先通過console下輸出的函數(shù)屬性方法來直觀的看一下:
函數(shù)內(nèi)部屬性只要包括兩個(gè)特殊的對(duì)象:arguments和this。
函數(shù)屬性包括:length和prototype
函數(shù)方法(非繼承)包括:apply()和call()
繼承而來的函數(shù)方法:bind()、toString()、toLocaleString()、valueOf()
其他的目前不熟,后面再補(bǔ)充
1. 函數(shù)內(nèi)部屬性
在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象,arguments和this。
arguments屬性
arguments是一個(gè)類數(shù)組對(duì)象,包含傳入函數(shù)的所有參數(shù),arguments的主要用途是保存函數(shù)參數(shù),但這個(gè)對(duì)象有一個(gè)callee屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù),下面是非常經(jīng)典的階乘函數(shù)。
function factorial (num){ if(num <= 1){ return 1; } else{ return num * factorial(num-1); } }
定義階乘函數(shù)一般都會(huì)用到遞歸算法,如上面代碼所示,在有函數(shù)名字,并且函數(shù)名字以后也不會(huì)改變的情況下,這種定義沒問題。但是這個(gè)函數(shù)的執(zhí)行與函數(shù)名factorial緊緊耦合在了一起,為了消除這種緊密耦合現(xiàn)象(函數(shù)名字改變等情況),可以使用arguments.callee。
function factorial(num){ if(num<=1){ return 1; } else{ return num * arguments.callee(num-1); } }
重寫后的factorial()函數(shù)的函數(shù)體內(nèi),沒有再引用函數(shù)名factorial。這樣即使改變函數(shù)名字,都可以保證正常完成遞歸調(diào)用。例如:
var trueFactorial = factorial; //改變?cè)瘮?shù)體的指針(保存位置) factorial = function (){ //factorial 指向返回0的新函數(shù) return 0; } alert(trueFactorial(5)); //120 alert(factorial(5)); //0
如果,不使用arguments.callee,那么trueFactorial(5)同樣返回0;
this屬性
2. 函數(shù)的方法
每個(gè)函數(shù)都包含兩個(gè)非繼承而來的方法:apply()和call()。這兩個(gè)方法的用途都是在特定的域中調(diào)用函數(shù)(看到這里木有看懂);其真正強(qiáng)大之處在于能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域
關(guān)于JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法的相關(guān)知識(shí),小編就給大家介紹這么多,希望對(duì)大家有所幫助!
相關(guān)文章
js select option對(duì)象小結(jié)
本篇文章主要是對(duì)js中的select option對(duì)象進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12js實(shí)現(xiàn)4個(gè)方向滾動(dòng)的球
本文主要介紹了js實(shí)現(xiàn)4個(gè)方向滾動(dòng)球的實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03微信公眾號(hào)開發(fā)之微信支付代碼記錄的實(shí)現(xiàn)
這篇文章主要介紹了微信公眾號(hào)開發(fā)之微信支付代碼記錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10javascript實(shí)現(xiàn)當(dāng)前頁導(dǎo)航激活的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)當(dāng)前頁導(dǎo)航激活的方法,涉及javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02用客戶端js實(shí)現(xiàn)帶省略號(hào)的分頁
帶省略號(hào)的分頁只有在服務(wù)器端才可以實(shí)現(xiàn),下面為大家介紹的是用js實(shí)現(xiàn)的帶省略號(hào)的分頁,感興趣的朋友可以參考下哈,希望對(duì)你寫出好的分頁有所幫助2013-04-04微信小程序 Animation實(shí)現(xiàn)圖片旋轉(zhuǎn)動(dòng)畫示例
這篇文章主要介紹了微信小程序 Animation實(shí)現(xiàn)圖片旋轉(zhuǎn)動(dòng)畫示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08JS簡單生成隨機(jī)數(shù)(隨機(jī)密碼)的方法
這篇文章主要介紹了JS簡單生成隨機(jī)數(shù)(隨機(jī)密碼)的方法,簡單分析了javascript隨機(jī)數(shù)相關(guān)函數(shù)并結(jié)合具體實(shí)例形式分析了隨機(jī)數(shù)的相關(guān)生成技巧,需要的朋友可以參考下2017-05-05JS中比較兩個(gè)Object數(shù)組是否相等方法實(shí)例
在本篇文章里小編給大家整理的是一篇關(guān)于JS中比較兩個(gè)Object數(shù)組是否相等方法實(shí)例內(nèi)容,有需要的朋友們學(xué)習(xí)下。2019-11-11