2012-12-23 30 views

回答

4

它們完全一樣。兩者在效率,產出或使用方面沒有任何區別。使用任何一個都是一個偏好問題。

儘管JS minfiers常用的兩種形式有較短的變化。也就是邏輯NOT -ing函數表達式並調用它:

!function() { 
    console.log(x); 
}();​ 
+0

好的,謝謝! :) – LSFR77

10

沒有區別。事實上,你需要使用()只是因爲普通...

function() { console.log('bar'); }(); 

...將無法正確JS解析器認可。正如ES5 standard說:

而且,ExpressionStatement不能用function關鍵字 開始,因爲這可能使含糊帶FunctionDeclaration。

替代方案(對(...))的解決方案是用一個一元運算符來增加此語句。這兩個...

+function() { console.log('bar'); }(); 

......還有......

!function() { console.log('bar'); }(); 

...會工作。

+0

感謝您的回答! – LSFR77

2

他們之間沒有區別。兩者都是immediately invoked function expressions。有些人喜歡Douglas Crockford喜歡second method。有些人喜歡第一個。有趣的是Crockford的JSLint不允許使用第一種方法,所以我認爲第二種方法更常見。

哦,並且如果您使用函數聲明而不是函數表達式,那麼您可以在函數出現在程序中之前調用該函數。這是因爲聲明在JavaScript懸掛:

greet(); // This will work 

function greet() { 
    alert("Merry Christmas!"); 
} 

同樣是不正確的函數表達式:

greet(); // This will not work 

var greet = function greet() { 
    alert("Merry Christmas!"); 
}; 

這幾乎是所有你需要知道現在。

+0

'function greet()'雖然有效,但沒有意義。只需'var greet = function()'就可以了。 – ErikE

+0

@ErikE - 沒有意義嗎?這對我來說非常有意義。 –

+0

無法使用的名稱的要點是什麼?它和'function(){var greet; }'如果從不使用問候。 – ErikE