首頁 >web前端 >js教程 >JavaScript中函數宣告與函數表達式

JavaScript中函數宣告與函數表達式

PHPz
PHPz原創
2016-05-16 15:57:031394瀏覽

目前為止,我們一直沒有對函數宣告和函數表達式加以區別。而實際上,解析器在向執行環境中載入資料時,對函數宣告和函數表達式並非一視同仁。解析器會率先讀取函數聲明,並使其在執行任何程式碼之前可用(可以存取);至於函數表達式,則必須等到解析器執行到它所在的程式碼行,才會真正被解釋執行。如下例:

程式碼如下:

alert(sum(10,10));
function sum(num1,num2)
{
    return num1+num2;
}

以上程式碼完全可以正確執行,因為在程式碼開始執行之前,解析器就已經透過一個名為函數宣告提升(function declaration hoisting)的過程,讀取並將函數宣告新增至執行環境。將程式碼求值時,JavaScript引擎在第一遍會宣告函數並將它們放到原始碼樹的頂部。所以,即使宣告函數的程式碼在呼叫它的程式碼後面,JavaScript引擎也能把函數宣告提升到頂部。如果像下面的例子所示,把上面的函數宣告改為等價的函數表達式,就會在執行的時候出現錯誤。

程式碼如下:

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

以上程式碼會在運作的時候出現錯誤,原因在於函數位於一個初始化語句中,而不是一個函數聲明。換句話說,在執行到函數所在的語句之前,變數sum中不會保存有對函數的參考;而且,由於第一行程式碼就會導致「unexpected identifier」(意外標識符)錯誤,實際上也不會執行到下一行。

 

 

除了宣告時候可以透過變數存取函數這一點區別之外,文法函數宣告與函數表達式的語法函數其實是等價的。

註:也可以同時呼叫函數宣告和函數表達式,例如 var sum=function sum(){}。不過,這種語法在Safari中會導致錯誤。

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

更多相關教學請造訪 javascript教學

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