3 回答

TA貢獻1836條經(jīng)驗 獲得超3個贊
理想情況下,您應該能夠完成所有這些:
function(){
// do stuff
}();
這意味著聲明匿名函數(shù)并執(zhí)行它。但由于JS語法的細節(jié),這不起作用。
實現(xiàn)這一目標的最短形式是使用一些表達式,例如UnaryExpression(以及CallExpression):
!function(){
// do stuff
}();
或者為了好玩:
-function(){
// do stuff
}();
要么:
+function(){
// do stuff
}();
甚至:
~function(){
// do stuff
return 0;
}( );

TA貢獻1890條經(jīng)驗 獲得超9個贊
在Javascript中,一行開頭應該function是一個函數(shù)語句,看起來應該是這樣的
function doSomething() {
}
像一個自我調用的功能
function(){
// do stuff
}();
不符合該形式(并且會在第一個打開的paren處導致語法錯誤,因為沒有函數(shù)名稱),因此括號用于描述匿名函數(shù)表達式。
(function(){
// do stuff
})();
但是任何創(chuàng)建表達式的東西(與函數(shù)語句相反)都會這樣做,因此!。它告訴解釋器這不是函數(shù)聲明。除此之外,運算符優(yōu)先級指示在否定之前調用該函數(shù)。
我不知道這個慣例,但如果它變得普遍,它可能有助于提高可讀性。我的意思是,任何閱讀!function大塊代碼頂部的人都會期望自我調用,我們已經(jīng)習慣的方式在我們看到的情況下期望相同(function。除了我們將失去那些煩人的括號。我希望這是原因,而不是速度或字符數(shù)的節(jié)省

TA貢獻1995條經(jīng)驗 獲得超2個贊
除了已經(jīng)說過的東西,語法與!如果您編寫沒有分號的javascript,則非常有用:
var i = 1
!function(){
console.log('ham')
}()
i = 2
(function(){
console.log('cheese')
})()
第一個示例按預期輸出'ham',但第二個示例將拋出錯誤,因為i = 2語句由于以下括號而未終止。
同樣在連接的javascript文件中,如果前面的代碼缺少分號,則不必擔心。所以不需要共同的;(function(){})(); 確保你自己不會破壞。
我知道我的答案有點晚了,但我認為還沒有提到:)
添加回答
舉報