1)function () {
// code here...
}();
2)(function () {
// code here...
})();
3)(function () {
// code here...
}());
有什么区别(特别是第三种变体)?它们都一样吗?
答案 0 :(得分:2)
2和3完全相同。它们之间没有功能差异。
1是语法错误。因为函数没有包含在括号中,所以它被视为函数声明。它无效,因为需要命名函数声明。括号使其成为“函数表达式”;这些不需要命名。
答案 1 :(得分:2)
第一个给出语法错误。第二个和第三个版本定义匿名函数并立即执行它。第二个和第三个版本也称为立即调用函数表达式。
您可能还会遇到另一个看起来像这样的版本。这在功能上与第二版和第三版相同,但它只是否定了返回值。
!function() {
//some code
}()
答案 2 :(得分:2)
第一个无效,但您可以执行以下操作:
var myfunction = function () {
// code here...
}();
正如其他答案所指出的那样,第二和第三之间没有区别,它们是相同的。
以下也是有效的,而不是使用括号:
!function() { /* code here... */ }();
~function() { /* code here... */ }();
+function() { /* code here... */ }();
-function() { /* code here... */ }();
new function() { /* code here... */ };
new function(arguments) { /* code here... */ }(arg);
注意:人们习惯称这些函数为“自执行匿名函数”,但该术语不正确。现在他们被称为'立即调用函数表达式(IIFE)'发音为“iffy”!