查看以下代码:
<a href="#" id="href" onclick="onClick('it's', 'a', 'new', 'dawn')">foo</a>
function onClick() {
}
try {
// Uncaught SyntaxError: missing ) after argument list -->
// since the quotes don't match under the onclick='.. attribute
href.onclick;
} catch (e) {
// no propegation over here
}
我在try语句中得到了前面提到的异常,但是没有传递给catch语句。
它发生在Chrome和FF上,我一直在想为什么。
答案 0 :(得分:4)
您无法捕获语法错误。它们不会在运行时抛出 - 在运行代码之前检测到。解析器无法告诉代码应该是什么意思,因为它不符合它所期望的语法,所以它只会抛出它的小手并产生错误。
也就是说,当你的代码可以控制解析器抛出的错误时,
eval()
或Function构造函数将字符串转换为可执行代码时。这隐含地涉及解析器的服务,它将以错误的代码行为相同。JSON.parse()
解释序列化对象时。这是一个不同的解析器,但你也可以发现它的错误。