【问题标题】:Why use (function(){})() or !function(){}()?为什么使用 (function(){})() 或 !function(){}()?
【发布时间】:2011-11-27 14:02:19
【问题描述】:
【问题讨论】:
标签:
javascript
closures
anonymous-function
【解决方案1】:
这取决于你在哪里写这个。 function(){}() 本身会产生语法错误,因为它被评估为 函数声明 并且需要名称。
通过使用括号或非运算符,您可以强制将其解释为不需要名称的函数表达式。
如果无论如何它都会被视为表达式,则可以省略括号或运算符。
【解决方案2】:
我猜你在问为什么使用:
var fn = (function(){}());
对比:
var fn = function(){}();
对我来说,简单的答案是,RHS 上的函数通常很长,直到我到达底部并看到结尾的 (),我才意识到我一直在阅读函数表达式而不是函数赋值.
完整的解释在 Peter Michaux 的An Important Pair of Parens。
【解决方案3】:
与 RobG 的回答略有不同。
许多脚本将整个程序包含在一个函数中,以确保适当的范围界定。然后使用末尾的双括号立即运行此函数。但是,这与定义可在页面中使用但最初不运行的函数的程序略有不同。
这两种情况的唯一区别是最后两个字符(添加了双括号)。由于这些程序可能很长,因此最初的括号表示“这将立即运行”。
程序是否需要运行?不。它对查看代码并试图理解它的人有帮助吗?是的。