为什么这段代码不会在JavaScript中抛出错误?

Why doesn't this piece of code throw an error in JavaScript?

本文关键字:JavaScript 出错 错误 段代码 代码 为什么      更新时间:2023-09-26

当它停止工作时,我花了一段时间才在我的代码中发现这个问题。

console.log('before var');
var lastReview = ''
    newReview;
console.log('after var');

lastReview = ''之后没有逗号,我认为这是一个语法错误,但是Chrome检查器和Firebug都没有在控制台上报告任何内容。下面的代码console.log永远不会被执行。

Chrome实际上报告错误,如果你直接在控制台中运行代码片段…但实际页面运行时就不是这样了。Firefox在任何情况下都不会报告错误。

为什么开发工具不报告这些简单的问题?

没有(语法)错误-此代码是有效的javascript。根据规则,JS插入一个分号:

console.log('before var');
var lastReview = ''; <-- here
    newReview;
console.log('after var');

使newReview;成为一个有效的,尽管是无意义的语句。

虽然没有语法错误,但由于未定义的变量(假设newReview之前没有声明),该代码仍然抛出一个运行时错误。

因为如果缺少分号,分号会自动插入-所以代码中没有语法错误。

在ECMAScript语言规范的自动分号插入规则一节中了解更多信息。

在你的例子中,这是:

var lastReview = ''

就变成:

var lastReview = '';