讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議18:比較function語句和function表達式 >

建議18:比較function語句和function表達式

在JavaScript語言中,既有function語句,也有函數表達式,這是令人困惑的,因為它們看起來是相同的。一個function語句就是值為一個函數的var語句的簡寫形式。

下面的語句:


function f{}


相當於:


var f=function{}


這裡建議使用第二種形式,因為它能明確表示f是一個包含一個函數值的變量。要用好JavaScript這門語言,理解函數就是數值是很重要的。

function語句在解析時會被提升,這意味著不管function被放置在哪裡,它都會被移動到定義時所在作用域的頂層。這放寬了函數必須先聲明後使用的要求,當然這也會造成混亂。

在if語句中也是禁止使用function語句的。大多數的瀏覽器都允許在if語句中使用function語句,但它們在解析function語句的處理上各不相同,因此造成了可移植性方面的問題。

根據官方的語法約定,一個語句不能夠以一個函數表達式開頭,而以單詞function開頭的語句是一個function語句。解決這個問題的方法就是把函數表達式括在一個圓括號之中。


(function{

//…

});