JS尝试不会捕获抛出的错误

时间:2016-02-24 15:55:29

标签: javascript html google-chrome firefox

查看以下代码:

HTML

<a href="#" id="href" onclick="onClick('it's', 'a', 'new', 'dawn')">foo</a>

JS

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上,我一直在想为什么。

小提琴:https://jsfiddle.net/wqob0x7d/1/

1 个答案:

答案 0 :(得分:4)

您无法捕获语法错误。它们不会在运行时抛出 - 在运行代码之前检测到。解析器无法告诉代码应该是什么意思,因为它不符合它所期望的语法,所以它只会抛出它的小手并产生错误。

也就是说,当你的代码可以控制解析器抛出的错误时,

  • 当您的代码使用eval()或Function构造函数将字符串转换为可执行代码时。这隐含地涉及解析器的服务,它将以错误的代码行为相同。
  • 使用JSON.parse()解释序列化对象时。这是一个不同的解析器,但你也可以发现它的错误。