我們已經討論了一段時間,我的工作,我們沒有找到答案:是否在變量衝擊表現中聲明函數?
是否聲明一個函數是這樣的:
function myFunction(){
//...
}
就這一性能比做得差異像這樣:
var func = function myFunction(){
//...
}
如果沒有,區別在哪裏?
我們已經討論了一段時間,我的工作,我們沒有找到答案:是否在變量衝擊表現中聲明函數?
是否聲明一個函數是這樣的:
function myFunction(){
//...
}
就這一性能比做得差異像這樣:
var func = function myFunction(){
//...
}
如果沒有,區別在哪裏?
不,性能沒有差異。
嚴格地說,前者是一個正常的「函數聲明」,後者是給變量賦一個「函數表達式」,但在調用時它們的處理方式是相同的。
最顯著差異(和它不會影響性能)是,由於吊裝函數聲明可以被訪問的範圍任何地方,但在使用函數表達式型式的變量func
將宣佈但不是可用直到後var func = ...
線。
+1提起吊裝。 – Andy
區別在於帶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.
應該有在那些沒有顯著的性能差異。
這樣的函數聲明還有另外一個區別,我相信你應該讀一下JavaScript中的函數和變量提升。
test(); // "X"
function test() {
console.log("X");
}
anotherTest(); // TypeError: undefined is not a function
var anotherTest = function() {
console.log("Y");
}
Downvote不是我的,但您是否嘗試過對這些進行基準測試? –
你可以試試這個:http://jsperf.com/。 –
http://stackoverflow.com/q/336859/1117720 –