2012-09-06 97 views
1

可能重複:「!function(){}」是什麼意思/在JavaScript中做?

!function() { 
    // do something 
}() 

什麼是:
What does the exclamation mark do before the function?
! preceding function in javascript?
javascript function leading bang ! syntax

我一直在JavaScript中的點點最近看到這種格局砰的一聲n前面的function關鍵字應該怎麼做?我似乎無法在interrtubez上找到任何有關它的信息。

+0

是的,上面所有三個「可能的重複」都回答了這個問題。謝謝 – hellatan

回答

1
function() { 
    // do something 
}(); 

這是立即調用的函數聲明。函數聲明不能​​立即調用;這是一個語法錯誤。

爲了解決這個語法錯誤,大多數人把IIFD放在parens中,強迫它成爲一個表達式(IIFE)。

(function() { 
    // do something 
})(); 

在這種情況下,他們添加了感嘆號。

+0

的確,我看到這個(以這種方式使用'!')作爲開發者如此懶惰的標誌,以至於他們認爲輸入更少的字符值得額外的時鐘週期來處理多餘的否定和來自共同慣例。 :-) – Pete

+0

@Pete:完全沒有。我一直這樣做,而不是因爲我很懶。 **它可以節省一個字節**特別是對於移動設備,減小文件大小非常重要。當然,這只是一個字節,但字節總和會提高整體頁面性能和較低的帶寬費用。多餘的否定事物是[完全雙層](http://jsperf.com/self-executing-style)和'!'並不罕見。 – josh3736

+0

@ josh3736我可以購買帶寬賬單參數,但一些開發者會過度使用「必須爲移動設備節省每個字節!」論據。你必須記住,移動設備也是超級動力不足的電腦。在另一方面,你更有可能在高帶寬連接上找到一個擁有糟糕CPU的人。保存請求是一回事(移動設備上的延遲是可怕的),但節省字節是一個艱難的銷售。我認爲節省幾個CPU週期當然值得在請求中增加一個額外的字節傳輸字節。 – Pete

相關問題