关于javascript:为什么要使用(function(){})()或!function(){}()?

Why use (function(){})() or !function(){}()?

我在阅读JavaScript时,函数(){}()的优点是什么(function(){})()? 然后它打了我,为什么用:

(function(){})()!function(){}()而不是function(){}()

有什么具体原因吗?


RobG的回答略有不同。

许多脚本在一个函数中包含整个程序,以确保正确的范围。然后使用末尾的双括号立即运行此函数。但是,这与定义可在页面中使用但最初不运行的功能的程序略有不同。

这两种情况之间的唯一区别是最后两个字符(添加了双括号)。由于这些程序可能是非常长的程序,因此初始括号表示"这将立即运行"。

该程序是否有必要运行?是否对查看代码并尝试理解代码的人有帮助吗?是。


我想你在问为什么用:

1
var fn = (function(){}());

与:

1
var fn = function(){}();

对我来说简单的答案是,通常RHS上的函数很长,直到我到达底部并看到结束(),我才意识到我一直在阅读函数表达式而不是函数赋值。

完整的解释是在Peter Michaux的一对重要的Parens中。


这取决于你写这个的地方。 function(){}()本身会生成语法错误,因为它被评估为函数声明和那些需要名称。

通过使用括号或not运算符,可以将其强制解释为函数表达式,它不需要名称。

如果它将被视为表达式,您可以省略括号或运算符。