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