JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法實例詳解
函數(shù)是由事件驅(qū)動的或者當它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊。
函數(shù)是對象,有自己的屬性和方法 。首先通過console下輸出的函數(shù)屬性方法來直觀的看一下:

函數(shù)內(nèi)部屬性只要包括兩個特殊的對象:arguments和this。
函數(shù)屬性包括:length和prototype
函數(shù)方法(非繼承)包括:apply()和call()
繼承而來的函數(shù)方法:bind()、toString()、toLocaleString()、valueOf()
其他的目前不熟,后面再補充
1. 函數(shù)內(nèi)部屬性
在函數(shù)內(nèi)部,有兩個特殊的對象,arguments和this。
arguments屬性
arguments是一個類數(shù)組對象,包含傳入函數(shù)的所有參數(shù),arguments的主要用途是保存函數(shù)參數(shù),但這個對象有一個callee屬性,該屬性是一個指針,指向擁有這個arguments對象的函數(shù),下面是非常經(jīng)典的階乘函數(shù)。
function factorial (num){
if(num <= 1){
return 1;
} else{
return num * factorial(num-1);
}
}
定義階乘函數(shù)一般都會用到遞歸算法,如上面代碼所示,在有函數(shù)名字,并且函數(shù)名字以后也不會改變的情況下,這種定義沒問題。但是這個函數(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; //改變原函數(shù)體的指針(保存位置)
factorial = function (){ //factorial 指向返回0的新函數(shù)
return 0;
}
alert(trueFactorial(5)); //120
alert(factorial(5)); //0
如果,不使用arguments.callee,那么trueFactorial(5)同樣返回0;
this屬性
2. 函數(shù)的方法
每個函數(shù)都包含兩個非繼承而來的方法:apply()和call()。這兩個方法的用途都是在特定的域中調(diào)用函數(shù)(看到這里木有看懂);其真正強大之處在于能夠擴充函數(shù)賴以運行的作用域
關(guān)于JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法的相關(guān)知識,小編就給大家介紹這么多,希望對大家有所幫助!
相關(guān)文章
微信小程序 Animation實現(xiàn)圖片旋轉(zhuǎn)動畫示例
這篇文章主要介紹了微信小程序 Animation實現(xiàn)圖片旋轉(zhuǎn)動畫示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

