0

在功能代码中,当我这样做时:

eval( 'var default = 100;' );
alert( default );

浏览器的 JS 引擎* 将在第二条语句上抛出语法错误,就好像第一条语句成功执行一样。

见这里: http: //jsfiddle.net/4FMdy/打开浏览器的控制台查看错误日志

但是,当我从代码中删除第二条语句时,我只有这个:

eval( 'var default = 100;' );

浏览器的 JS 引擎在该语句上抛出语法错误。

见这里:http: //jsfiddle.net/4FMdy/1/

我不明白这一点。如果第一条语句抛出语法错误(应该如此),为什么在我上面的第一个示例中只有第二条语句抛出这样的错误。据我了解,如果一条语句抛出错误,那必然意味着所有先前的语句(同一个调用)都成功执行。

顺便说一句,语法错误被抛出,因为default它是 JavaScript 中的保留字,所以它不能用作变量名。

另外,请不要发表“评估是邪恶的”评论。我只是想了解浏览器的 JS 引擎的行为。

* 我在 Firefox 和 Chrome 中测试过

4

2 回答 2

2

只是一个假设:

首先将解析脚本块,但不执行(eval)

浏览器仅检测到第 2 行中的语法错误并且没有执行完整的脚本块,因此他不会确定 eval() 中的语法错误

当您将 2 行放在 2 个不同的脚本元素中时,您将收到两个错误:

http://jsfiddle.net/doktormolle/CfRmj/

于 2012-09-13T13:34:31.373 回答
0

因为“默认”是 Javascript 保留关键字 :)

因此,如果检查代码是否正确,则 alert(default) 会引发“语法错误”,但随后会运行 eval 函数,并且由于第一个错误,进程将不会到达此处。

于 2012-09-13T13:28:59.593 回答