为什么这段代码不会在JavaScript中引发错误?

时间:2013-04-04 18:11:39

标签: javascript firebug web-inspector

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

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

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

如果直接在控制台中运行代码段,Chrome实际上会报告错误...但实际页面运行时却不会。 Firefox无论如何都不会报告错误。

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

2 个答案:

答案 0 :(得分:2)

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

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

使newReview;成为有效的,尽管是荒谬的陈述。

虽然没有语法错误,但由于未定义的变量(假设newReview之前没有声明),此代码仍然会引发运行时错误。

答案 1 :(得分:1)

因为如果丢失则会自动插入分号 - 因此代码中没有语法错误。

在ECMAScript语言规范的Rules of Automatic Semicolon Insertion部分中阅读更多相关信息。

在你的例子中,这个:

var lastReview = ''

变为:

var lastReview = '';