为什么忽略eval()代码中的语法错误?

时间:2012-09-13 13:21:37

标签: javascript browser theory interpreter

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

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

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

请参阅此处: http://jsfiddle.net/4FMdy/打开浏览器的console以查看错误日志

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

eval( 'var default = 100;' );

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

请参见此处: http://jsfiddle.net/4FMdy/1/

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

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

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

*我在Firefox和Chrome

中测试过

2 个答案:

答案 0 :(得分:2)

只是一个假设:

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

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

当你将2行放在2个不同的script-element中时,你会收到两个错误:

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

答案 1 :(得分:0)

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

所以警告(默认)抛出“语法错误”如果检查代码是否正确,但是然后运行函数eval,并且由于第一个错误,进程wount到达此处。