为什么 SyntaxError 会阻止前一行运行,而 TypeError 却不会?

0 javascript node.js

console.log('hello');
console.og('bye');
Run Code Online (Sandbox Code Playgroud)

这里打印“hello”并在第二行显示错误。

console.log('hello');
console..log('bye');
Run Code Online (Sandbox Code Playgroud)

但是这里,“hello”没有被打印,而错误在第二行。

我知道为什么第二行会抛出错误,但是为什么会影响第一行?

Avi*_*usX 6

JavaScript 并不是简单地逐行解释。代码将首先被解析然后执行。您的第二个示例存在语法错误,代码根本无法解析,因此它永远不会进入执行步骤。

解析步骤就是提升之类的东西可以工作的原因。如果您的代码只是开始执行,那么提升将是不可能的。如果你的代码在执行前没有被解析,你也可以这样做:

function someFunction() {
    console.log('hello');
}

someFunction();
const someVariable = 5;
console.log(someVariable + 10);

---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Odio euismod lacinia at quis risus sed. Amet tellus cras adipiscing enim eu turpis egestas pretium.
Run Code Online (Sandbox Code Playgroud)

并期望它能够工作,因为代码是正确的,直到您到达 lorem ipsum 文本。但是,这显然行不通,原因与您的第二个示例行不通的原因相同。解析失败。

您的第一个示例在语法上是正确的,并且将开始执行,并且仅在到达第二行时抛出错误。

我建议阅读这篇文章。它应该解释一些与该主题相关的 JS 行为。