2013-10-17 30 views
3

我們已經討論了一段時間,我的工作,我們沒有找到答案:是否在變量衝擊表現中聲明函數?

是否聲明一個函數是這樣的:

function myFunction(){ 
    //... 
} 

就這一性能比做得差異像這樣:

var func = function myFunction(){ 
    //... 
} 

如果沒有,區別在哪裏?

+1

Downvote不是我的,但您是否嘗試過對這些進行基準測試? –

+0

你可以試試這個:http://jsperf.com/。 –

+0

http://stackoverflow.com/q/336859/1117720 –

回答

3

不,性能沒有差異。

嚴格地說,前者是一個正常的「函數聲明」,後者是給變量賦一個「函數表達式」,但在調用時它們的處理方式是相同的。

最顯著差異(和它不會影響性能)是,由於吊裝函數聲明可以被訪問的範圍任何地方,但在使用函數表達式型式的變量func宣佈但不是可用直到var func = ...線。

+0

+1提起吊裝。 – Andy

1

區別在於帶var的函數是運行時定義,而其他函數是腳本的解析時間定義。

第一個例子是一個函數聲明。這使用「函數」語句來創建函數。該功能在解析時可用,並可在該範圍內的任何地方調用。您仍然可以稍後將其存儲在變量或對象屬性中,

第二個片段顯示函數表達式。這涉及使用「函數」運算符來創建函數,該運算符的結果可以存儲在任何變量或對象屬性中。函數表達式非常強大。該函數表達式通常被稱爲「匿名函數」,因爲它並不一定有一個名字,

Function expressions can actually be seen quite often. A common pattern in web development is to 「fork」 function definitions based on some kind of a feature test, allowing for the best performance. Since such forking usually happens in the same scope, it is almost always necessary to use function expressions.

看一看Named function expressions demystified

+0

呃。第一個例子是函數聲明,第二個例子肯定是函數表達式。 – Andy

+0

@安迪是的 - 這個解釋是不正確的 – Alnitak

0

應該有在那些沒有顯著的性能差異。

這樣的函數聲明還有另外一個區別,我相信你應該讀一下JavaScript中的函數和變量提升。

test(); // "X" 
function test() { 
    console.log("X"); 
} 

anotherTest(); // TypeError: undefined is not a function 
var anotherTest = function() { 
    console.log("Y"); 
}