我正在阅读In JavaScript, what is the advantage of !function(){}() over (function () {})()?然后它击中了我,为什么要使用:
(function(){})()
或!function(){}()
而非function(){}()
?
有什么具体原因吗?
答案 0 :(得分:2)
这取决于你在哪里写。 function(){}()
本身会生成语法错误,因为它被评估为函数声明,并且需要名称。
通过使用括号或not运算符,可以将其强制解释为函数表达式,它不需要名称。
如果将其视为表达式,您可以省略括号或运算符。
答案 1 :(得分:2)
我猜你在问为什么要使用:
var fn = (function(){}());
与
var fn = function(){}();
对我来说,简单的答案是,RHS上的函数通常很长,直到我到达底部并看到结束()
,我才意识到我一直在阅读函数表达式,而不是功能分配。
完整的解释是在Peter Michaux的An Important Pair of Parens。
答案 2 :(得分:2)
RobG的回答略有不同。
许多脚本在一个函数中包含整个程序,以确保正确的范围。然后使用末尾的双括号立即运行此函数。但是,这与定义可在页面中使用但最初不会运行的函数的程序略有不同。
这两种情况之间的唯一区别是最后两个字符(添加了双括号)。由于这些程序可能是非常长的程序,因此初始括号表示“这将立即运行。”
程序运行是否必要?是否对查看代码并尝试理解代码的人有帮助吗?是。