function(){ alert("test123");}()
產生SyntaxError: Unexpected token (
而
!function(){ alert("test123");}()
警報 「test123」
?
function(){ alert("test123");}()
產生SyntaxError: Unexpected token (
而
!function(){ alert("test123");}()
警報 「test123」
?
這是因爲通過添加!
符號將聲明轉換爲表達式並立即調用它。 通過包圍你的函數放在括號中你會做第一個例子中沒有錯誤的工作:
(function(){ alert("test123");})()
使其更清晰,你可以想想第一次表達類似:
if (false || !function(){ return false; }())
太糟糕了我不能寫出正確的答案,但是......「標識符」不是正確的術語。區別是在定義和表達之間。前者不能立即調用。 –
正確的軌道,但錯誤的解釋。 !!將聲明轉換爲表達式。 – slebetman
我可以定義一個函數並且不會調用它:'!function(){alert(「不會被調用」)}' –
http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – zerkms
@zerkms您應該將其作爲回答,因爲它實際上很好地解釋了問題的核心。 – Kippie
來吧,有_has_是重複的... –