【问题标题】:Different ways to execute IIFE?执行 IIFE 的不同方法?
【发布时间】:2013-03-03 23:08:44
【问题描述】:

有什么区别

(function (){alert('')}    ())

(function (){alert('')})    ()

两者都可以,但我应该什么时候使用它们?

【问题讨论】:

标签: javascript iife


【解决方案1】:

包装括号仅用于强制解析器将构造解析为函数表达式,而不是函数声明。这是必要的,因为调用函数声明是非法的,但调用函数表达式是合法的。

为此,调用括号的位置并不重要。您如何强制将函数解析为表达式也无关紧要。以下内容也可以:

!function () {
    alert('')
}();

~function () {
    alert('')
}();

// Any unary operator will work

如果您决定使用环绕括号(分组运算符),请记住 JSLint will tell you to move the invoking parentheses inside。这只是一种风格选择,如果你愿意,可以忽略它。

【讨论】:

  • @RoyiNamir,即使void 操作员也可以工作:-)
  • @Barmaley.exe 我要试试看 :-)
  • 是的,任何一元运算符都可以工作。即使是voiddeletetypeof……它们的可读性也不是很好!
【解决方案2】:

他们都做同样的事情。

JSLint 建议您使用第一个,将执行括号放在分组括号内,大概这样所有内容都整齐地组合在一起。

对于它的价值,我个人认为您的第二个示例更加清晰,因为在扫描代码时,您可以看到执行从函数表达式中脱颖而出。

虽然不是重复的,this question 涵盖了类似的领域,因此可能值得一看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2011-10-18
    • 2021-10-19
    • 1970-01-01
    • 2021-03-22
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多