为什么我们有(在这里的功能词之前?
(function() {
var message = "Привет"; function showMessage() {
alert( message ); }
showMessage();
})();
答案 0 :(得分:1)
尽量不要:
function() { return 1; }()
然后你会得到Uncaught SyntaxError: Unexpected token (
JavaScript解析器以两种模式运行,我们称之为表达式模式和普通模式,在正常模式下,JS解析器需要顶级声明,如函数和代码块。您使用'('进入表达式模式,在表达式模式function() { }
中将被解释为常量,其值是一个函数。
对象文字有类似的情况:
{ foo: 1 }
没有'('这意味着代码块,你有单个表达式 - 常量1由标签继续,当你使用({ foo: 1 })
解析器进入表达式模式并将其解释为具有属性foo
的对象文字
为什么有两种模式,它由语言语法强制执行,在JS的情况下非常复杂(就像大多数基于C语言一样)。