Javascript定义然后调用语法

Javascript定义然后调用语法,javascript,function,closures,call,Javascript,Function,Closures,Call,非常直截了当,所以问题是为什么 (function(){ console.log('a'); }()); // 'a' 或 工作,但是 function(){ console.log('a'); }() // SyntaxError: Unexpected token ( 给出一个错误?这种行为背后的含义是什么?或者这些附加括号的用途是什么?附加括号将函数转换为函数表达式,而不是函数声明 只有函数表达式可以用尾随的()立即调用,对此没有明确的解释。JavaScript根本无法成功解析func

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

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

工作,但是

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

给出一个错误?这种行为背后的含义是什么?或者这些附加括号的用途是什么?

附加括号将
函数
转换为函数表达式,而不是函数声明


只有函数表达式可以用尾随的
()

立即调用,对此没有明确的解释。JavaScript根本无法成功解析
function(){console.log('a');}()
。其他示例也会出现这种情况,例如:

1.toString();    // Syntax error
(1).toString();  // Works
(工作)代码的替代方案是(注意开头的
):

1.toString();    // Syntax error
(1).toString();  // Works
!function(){ console.log('a'); }()