JS中的半结肠问题

sac*_*024 7 javascript minify

我碰巧遇到了以下奇怪的情况:

其中一个网络调用返回了这样的响应:

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';
Run Code Online (Sandbox Code Playgroud)

但是,当对以下脚本进行评估时,它将返回错误

意外的标识符

semi-colon在function1定义之后添加a时,此问题会得到修复因此正确的修复方法是:

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';
Run Code Online (Sandbox Code Playgroud)

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

Ram*_*lfc 2

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';
Run Code Online (Sandbox Code Playgroud)

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

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';
Run Code Online (Sandbox Code Playgroud)

这里因为匿名函数后面有一个分号,所以 js 引擎可以判断出这是两个不同的语句。