JS 中的分号问题

Semi Colon Issue in JS

我碰巧遇到了以下奇怪的案例:

其中一个网络调用返回了如下响应:

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';

但是当下面的脚本被评估时,它返回了一个错误

Unexpected Identifier

当在 function1 定义后添加 semi-colon 时,此问题得到解决因此正确的解决方法是:

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';

我很想知道这背后的原因。

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';

js 引擎将整个事情作为一个语句读取,因为它找不到匿名函数赋值的任何分号,它继续解析只是为了找到 window.project = 'test,所以它给你一个错误。

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';

这里因为你在匿名函数后面加了一个分号,js引擎可以判断这是2个不同的语句。

function1是一个变量,在window.project之前似乎没有结束; js 将两个变量解释为 function1。可以在 function1 声明后添加逗号 , 运算符,以避免两个变量 function1project

之间出现语法错误

window.function1 = function() {
  console.log('function 1');
}, window.project = 'test';

在 Javascript 中,如果语句后跟换行符,则可以省略分号。

同一行中有 2 个语句,因此第一个分号是必需的。

但你可以这样写:

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test'

(没有最后一个分号)

此处有更多详细信息:https://www.codecademy.com/forum_questions/507f6dd09266b70200000d7e