首頁  >  文章  >  web前端  >  JavaScript函數內部屬性與函數方法實例詳解_javascript技巧

JavaScript函數內部屬性與函數方法實例詳解_javascript技巧

WBOY
WBOY原創
2016-05-16 15:10:321178瀏覽

函數是由事件驅動的或是當它被呼叫時執行的可重複使用的程式碼區塊。

函數是對象,有自己的屬性和方法 。首先透過console下輸出的函數屬性方法來直觀的看一下:

函數內部屬性只要包含兩個特殊的物件:arguments和this。

函數屬性包括:length和prototype

函數方法(非繼承)包括:apply()和call()

繼承而來的函數方法:bind()、toString()、toLocaleString()、valueOf()

其他的目前不熟,後面再補充

1. 函數內部屬性

在函數內部,有兩個特殊的對象,arguments和this。

arguments屬性

arguments是一個類別數組對象,包含傳入函數的所有參數,arguments的主要用途是保存函數參數,但這個對像有一個callee屬性,該屬性是一個指針,指向擁有這個arguments對象的函數,下面是非常經典的階乘函數。

function factorial (num){
if(num <= 1){
return 1;
} else{
return num * factorial(num-1); 
}
}

定義階乘函數一般都會用到遞歸演算法,如上面程式碼所示,在有函數名字,並且函數名字以後也不會改變的情況下,這種定義沒問題。但是這個函數的執行與函數名稱factorial緊密耦合在了一起,為了消除這種緊密耦合現象(函數名字改變等情況),可以使用arguments.callee。

function factorial(num){
if(num<=1){
return 1;
} else{
return num * arguments.callee(num-1);
}
}

重寫後的factorial()函數的函式體內,沒有再引用函式名稱factorial。這樣即使改變函數名字,都可以保證正常完成遞歸呼叫。例如:

var trueFactorial = factorial; //改变原函数体的指针(保存位置)
factorial = function (){ //factorial 指向返回0的新函数
return 0;
}
alert(trueFactorial(5)); //120
alert(factorial(5)); //0

如果,不使用arguments.callee,那麼trueFactorial(5)同樣回傳0;

this屬性

2. 函數的方法

每個函數包含兩個非繼承而來的方法:apply()和call()。這兩個方法的用途都是在特定的域中呼叫函數(看到這裡木有看懂);其真正強大之處在於能夠擴充函數賴以運行的作用域

關於JavaScript函數內部屬性和函數方法的相關知識,小編就跟大家介紹這麼多,希望對大家有幫助!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn