据我所知,前三个没有区别。
当您编写立即调用函数表达式时,外部参数括号可以存在于环绕括号的内部和外部。想一想,就像用于相同目的的另一种语法。
所以这个:
(
function() {
}
());
还有这个:
(
function() {
}
)();
完全平等。
对于第三个示例,分号,在文件连接的情况下用作保护措施。当您编写代码时,您或供应商可能有一个不以分号结尾的脚本。在这种情况下,当您连接之前的文件代码时,不以问号结尾的代码会中断脚本。
举例
script-1.js
var name = 'Nikos';
console.log( name )
script-2.js
(
function() {
// Do some stuff here
}
)();
concatenation.js
var name = 'Nikos';
console.log( name ) // This line will throw an error, because it is not the last statement in the file.
(
function() {
// Do some stuff here
}
)();
但是如果我们把 script-2.js 改成这样:
script-2.js
;(
function() {
// Do some stuff here
}
)();
concatenation.js 将如下所示:
var name = 'Nikos';
console.log( name )
;( // This will force the previous statement to finish.
function() {
// Do some stuff here
}
)();
最后我发现了这个:
它强制解析器将 + 之后的部分视为
表达。这通常用于调用的函数
立即,例如:
+function() { console.log("Foo!"); }();
如果没有 + ,如果解析器处于期望语句的状态(可以是
表达式或几个非表达式语句),单词函数
看起来像函数声明的开始,而不是
函数表达式和它后面的 () (末尾的那些
上面的行)将是一个语法错误(就像缺少 a
名称,在该示例中)。加上 +,它使它成为一个函数表达式,
这意味着名称是可选的,并导致引用
函数,可以调用,所以括号有效。
- 只是其中一种选择。它也可以是 -、!、~ 或任何其他一元运算符。或者,您可以使用括号(这
更常见,但在语法上既不正确也不正确):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
来自:https://stackoverflow.com/a/13341710/1150619