首頁 >web前端 >js教程 >ECMAScript中函數function類型_javascript技巧

ECMAScript中函數function類型_javascript技巧

WBOY
WBOY原創
2016-05-16 15:57:071294瀏覽

說起來ECMAScript中上面最有意思,我想那莫過於函數了,有意思的根源,則在於函數其實是物件。每個函數都是Function類型的實例,而且都與其他引用類型一樣具有屬性和方法。由於函數是對象,因此函數名稱實際上也是一個指向函數對象的指針,不會與某個函數綁定。函數通常是使用函數宣告語法定義的,如下例子:

複製程式碼 程式碼如下:

 function sum(num1,num2)
 {
    return num1 num2;
 }

這與下面使用函數表達式定義函數的方式幾乎相差無幾。

複製程式碼 程式碼如下:

 var sum=function(num1,num2)
 {
     return num1 num2;
 };

  以上程式碼定了變數sum並將其初始化為一個函數。你們會注意到,function關鍵字後面沒有函數名稱。這是因為在使用函數表達式定義函數時,沒有必要使用函數名(透過變數sum既可以引用函數)。另外,也要注意函數末尾有一個分號,就像在宣告其他變數時一樣。

  最後一種定義函數的方式是使用Function建構子。 Function建構函數可以接受任意數量的參數,但最後一個參數總是會被看成函數體,而前面的參數則枚舉出了新函數的參數。如下例:

複製程式碼 程式碼如下:

var sum=new Function("num1","num2","re​​turn num1 num2");//不建議

  從技術角度講,這是一個函數表達式。但是,我們不推薦使用這種方法定義函數, 因為這種語法會導致解析兩次程式碼(第一次解析常規的ECMAScript程式碼,第二次是解析傳入建構函數中的字串),進而影響效能。不過,這種語法對於理解「函數是對象,函數名稱是指標」的概念都是非常直觀的。

由於函數名稱只是指向函數的指針,因此函數名稱與包含物件指標的其他變數沒有什麼不同。換句話說,一個函數可能會有多個名字,如下例:

複製程式碼 程式碼如下:

function sum(num1,num2)
{
    return num1 num2;
}
alert(sum(10,10));//20
var anotherSum=sum;
alert(anotherSum(10,10));//20
sum=null;
alert(anotherSum(10,10));//20

  以上程式碼首先定義了一個名為sum()的函數,用來求兩個值的和。然後,有聲明了變數anotherSum,並將其設為sum()相等(將sum的值賦給anotherSum)。請注意,使用不帶圓括號的函數名稱是存取函數指針,而非呼叫函數。此時,anotherSum和sum 就指向了同一個函數,因此anotherSum()也可以被呼叫並傳回結果。即使將sum設為null,讓它與函數“斷絕關係”,但仍然可以證明正常呼叫anotherSum()。

以上所述就是本文的全部內容了,希望能夠對大家學習javascript有所幫助。

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