我现在看到这种奇怪的行为,我无法定义
function(){}
或
function(a){
console.log(a)
}
它会抛出Uncaught SyntaxError
。
但是test = function(){}
或(function(){})
确实有效。
Safari开发工具有更好的错误报告:它说
SyntaxError:函数语句必须具有名称。
如果您永远不会使用它,那么定义一个类似的函数是没有意义的。但它仍然很奇怪。我想我已经在问题中提供了答案。
答案 0 :(得分:28)
JavaScript具有函数声明和函数表达式。前者不能立即调用,而后者可以。这是语言语法的问题。
功能声明:
function foo() {
// ...
}
函数表达式(在=
的右侧):
var foo = function() {
// ...
};
通过在函数周围添加括号,您强制将函数解析为函数表达式,因为它不可能在括号内放置函数声明(只有表达式是预期和接受的):
(function foo() {
// ...
});
然后您可以立即调用它:
(function foo() {
// ...
})();
要获得更详细的说明,请查看Function Definitions in JavaScript。
答案 1 :(得分:9)
(function(){})
中的括号表示函数计算,对象现在包含在括号内,此评估返回函数。可以这样调用:(function(){})();
。
function(){}
未评估。导致错误是有道理的,因为如你所说,你将无法以任何方式使用它。