JS使用这两种函数有什么不同吗?在第二个函数中,它包含在括号中以便进一步关闭。但它真的有所作为吗?
var test2 = function () {
var open = function () { }
return {
open: open
};
}();
var test = (function () {
var open = function () {
};
return {
open: open
};
})();
答案 0 :(得分:2)
不,没有区别,但是很多人会在函数声明周围加上括号,因为如果省略变量声明,javascript语法会不正确:
function () { // javascript parser gives an error here
var open = function () { }
return {
open: open
};
}();
(function () {
var open = function () {
};
return {
open: open
};
})(); // this works just fine.
出于习惯,我可能会使用括号。这样,其他开发者不必抓挠他们的头脑并且不知道"是允许的吗?"
答案 1 :(得分:0)
不,没有。由于您的函数出现在=
之后,解析器需要一个表达式。您在IIFE之前看到(
的唯一原因是您需要让解析器期望看到表达式。如果解析器期望看到statement-or-expression,并且它看到function
,那么它假定它找到了一个函数声明而不是函数 expression ,因此,在这种情况下(对于IIFE)没有(
会导致解析错误。
答案 2 :(得分:-1)
在此上下文中,没有。
JavaScript有function expressions
和function statements
。您的示例的语法在运算符后面有function
关键字,因此JavaScript编译器知道您有function expression
。
<强>无论其强>
使用parens是优选的,因为它为人类读者提供了以下代码是IIFE而非常规函数调用的线索。
其他强>
在你没有经营者的情况下,这些人确实会有所作为。
(function() { /* do stuff }())
完全不同于:
function() { /* do stuff }()