我们为什么要把这些问题放在JS之前(')?

时间:2016-01-23 08:01:01

标签: javascript

为什么我们有(在这里的功能词之前?

(function() {

     var message = "Привет"; function showMessage() {
    alert( message );   }

     showMessage();

})();

1 个答案:

答案 0 :(得分:1)

尽量不要:

function() { return 1; }()

然后你会得到Uncaught SyntaxError: Unexpected token (

JavaScript解析器以两种模式运行,我们称之为表达式模式和普通模式,在正常模式下,JS解析器需要顶级声明,如函数和代码块。您使用'('进入表达式模式,在表达式模式function() { }中将被解释为常量,其值是一个函数。

对象文字有类似的情况:

{ foo: 1 }

没有'('这意味着代码块,你有单个表达式 - 常量1由标签继续,当你使用({ foo: 1 })解析器进入表达式模式并将其解释为具有属性foo的对象文字

为什么有两种模式,它由语言语法强制执行,在JS的情况下非常复杂(就像大多数基于C语言一样)。