ECMAScript中函數function類型,ecmascriptfunction

來源:互聯網
上載者:User

ECMAScript中函數function類型,ecmascriptfunction

說起來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","return 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有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.