【问题标题】:Why use (function(){})() or !function(){}()?为什么使用 (function(){})() 或 !function(){}()?
【发布时间】:2011-11-27 14:02:19
【问题描述】:

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

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

有什么具体原因吗?

【问题讨论】:

标签: javascript closures anonymous-function


【解决方案1】:

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

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

如果无论如何它都会被视为表达式,则可以省略括号或运算符。

【讨论】:

    【解决方案2】:

    我猜你在问为什么使用:

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

    对比:

    var fn = function(){}();
    

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

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

    【讨论】:

      【解决方案3】:

      与 RobG 的回答略有不同。

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-06
        • 2012-06-09
        • 2011-12-28
        • 2011-03-30
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 2012-07-12
        相关资源
        最近更新 更多