关于功能:Javascript define-then-call语法

Javascript define-then-call syntax

本问题已经有最佳答案,请猛点这里访问。

非常直截了当,所以问题是为什么

1
(function(){ console.log('a'); }()); // 'a'

要么

1
(function(){ console.log('a'); })(); // 'a'

工作,但是

1
function(){ console.log('a'); }() // SyntaxError: Unexpected token (

给出错误? 这种行为背后的含义是什么? 或者这些额外括号的目的是什么?


对此没有明确的解释。 JavaScript根本无法成功解析function(){ console.log('a'); }()。 这也适用于其他示例,如下所示:

1
2
1.toString();    // Syntax error
(1).toString();  // Works

代码的(工作)替代方法(注意开头的!):

1
!function(){ console.log('a'); }()

额外的括号将function转换为函数表达式而不是函数声明。

只能使用尾部()立即调用函数表达式。