在功能代码中,当我这样做时:
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
中测试过答案 0 :(得分:2)
只是一个假设:
首先解析脚本块,但不执行(eval)
浏览器仅检测第2行中的语法错误,并且未执行完整的脚本块,因此他不会确定eval()中的语法错误
当你将2行放在2个不同的script-element中时,你会收到两个错误:
答案 1 :(得分:0)
因为“默认”是Javascript保留的关键字:)
所以警告(默认)抛出“语法错误”如果检查代码是否正确,但是然后运行函数eval,并且由于第一个错误,进程wount到达此处。