1. 程式人生 > 其它 >函式宣告與表示式的區別

函式宣告與表示式的區別

HTML5學堂:函式有不同的定義方法,一種是函式宣告,另一種是函式表示式,那麼這兩種有何區別呢?

函式宣告的基本語法

function functionName(arg0, arg1, ..., argn) {
    // 函式體 - HTML5學堂
}

函式宣告的重要特徵:函式宣告提升

在執行程式碼之前,會先讀取函式宣告,這也就意味著,可以把函式宣告放在呼叫它的語句的後面。

函式表示式的常見語法形式

var functionName = function(arg0, arg1, ..., argn) {
    // 函式體 - HTML5學堂
};

如何理解上面這段程式碼呢?建立一個匿名函式(也叫拉達姆函式),並將整個函式賦值給變數functionName

在執行這句程式碼之前,是不能夠實現functionName()函式的呼叫的,函式表示式和其他表示式一樣,都需要在使用前賦值。

經典案例

此段程式碼合法

var say;
if(conditions) {
    say = function () { console.log('函式表示式-程式碼合法'); }
} else {
    say = function () { console.log('H5course'); }
}

此段程式碼不合法

if(conditions) {
    function say() { console.log('函式宣告-不合法程式碼'); }
} else {
    function say() { console.log('HTML5學堂'); }
}

拓展性知識

在使用函式宣告建立函式時,對於非IE瀏覽器,會為函式定義一個非標準的name屬性,可以通過name屬性訪問到給函式指定的名字。而採用函式表示式所定義的函式,name屬性為空字串。如下:

function h5course() {};
console.log(h5course.name);
var h5 = function(){};
console.log(h5.name);

此段程式碼中,前者會列印h5course,但是後者只會輸出空字串

寫在最後的一些話:關於此方面知識的理解,會涉及到“預編譯與執行”,想了解此方面知識的童鞋可以檢視——>《JavaScript 執行機制之執行順序詳解》

HTML5學堂小編-利利。耗時:1.5h