3 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
這兩種形式?jīng)]有實(shí)際區(qū)別,但從語(yǔ)法的角度來(lái)看,兩者之間的區(qū)別在于分組算子 - 括號(hào) - 將在第一個(gè)例子中保存CallExpression,包括FunctionExpression:
CallExpression
| |
FunctionExpression |
| |
VV
(function(){}());
^ ^
| --PrimaryExpression - |
在第二個(gè)例子中,我們首先得到一個(gè)整體CallExpression,它包含F(xiàn)unctionExpression:
PrimaryExpression
|
FunctionExpression
|
V
(function(){})();
^ ^
| - CallExpression - |

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
就編譯器而言,兩者之間沒有區(qū)別。但是,會(huì)發(fā)現(xiàn)(function () {}())Douglas Crockford的JavaScript 代碼約定中推薦使用該樣式。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
就差異而言,它實(shí)際上只是語(yǔ)法糖。有點(diǎn)相當(dāng)于:“你喜歡jQuery()還是$()?” 兩者都可以互換地編譯,執(zhí)行和使用(AFAIK)。
從我到目前為止看到的代碼示例中,更多人似乎遵循Crockford代碼約定:
(function() { ... }());
就個(gè)人而言,我更喜歡這個(gè)(function(){})();慣例,因?yàn)槲矣X得這個(gè)功能是自動(dòng)執(zhí)行的; 我也是jQuery的大用戶,這是jQuery源代碼中使用的約定。
此外,無(wú)論您選擇使用哪種形式,都可以使用parens來(lái)封裝您的自動(dòng)執(zhí)行功能。
添加回答
舉報(bào)