执行IIFE的不同方式?

时间:2013-03-15 09:39:37

标签: javascript iife

之间有什么区别吗?
(function (){alert('')}    ())

vs

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

两者都有效,但我应该何时使用?

2 个答案:

答案 0 :(得分:3)

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

为此,调用括号的位置无关紧要。如何强制将函数解析为表达式也无关紧要。以下也适用:

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

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

// Any unary operator will work

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

答案 1 :(得分:1)

他们都做同样的事情。

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

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

虽然不重复,this question涵盖了类似的基础,所以可能值得一看。