为什么要使用(function(){})()或!function(){}()?

时间:2011-09-29 10:06:08

标签: javascript closures anonymous-function

我正在阅读In JavaScript, what is the advantage of !function(){}() over (function () {})()?然后它击中了我,为什么要使用:

(function(){})()!function(){}()而非function(){}()

有什么具体原因吗?

3 个答案:

答案 0 :(得分:2)

这取决于你在哪里写function(){}()本身会生成语法错误,因为它被评估为函数声明,并且需要名称。

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

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

答案 1 :(得分:2)

我猜你在问为什么要使用:

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

var fn = function(){}();

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

完整的解释是在Peter Michaux的An Important Pair of Parens

答案 2 :(得分:2)

RobG的回答略有不同。

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

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

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