为什么会忽略此错误?

时间:2015-04-27 16:14:35

标签: javascript exception-handling

我正在阅读Eloquent JavaScript,但有一部分代码我不明白。

for (;;) {
    try {
        var dir = promtDirection(" Where ?"); // ← typo !
        console.log(" You chose ", dir);
        break;
    } catch (e) {
        console.log(" Not a valid direction . Try again .");
    }
}  

这本书说:

  

但我们拼写错误的promptDirection,这将导致“未定义   变量“错误。因为catch块完全忽略了它   异常值(e),假设它知道问题是什么,它   错误地将变量错误视为指示错误输入。

但是,如果它是全面捕捉异常,那么它不应该只是抓住错字打印出来的错误吗?

2 个答案:

答案 0 :(得分:3)

  

但是,如果它是全面捕捉异常,那么它不应该只是抓住错误产生的错误

此时它会声明方向无效,这不是正确的错误。

  

并终止?

不,它将进入for循环的下一次迭代(此时它会遇到同样的错误,无限重复)。

答案 1 :(得分:1)

代码的问题在于catch块假定错误与用户输入有关。但事实并非如此,并且由于真正的错误(作为e传递)从未显示过,开发人员将被误导搜索它。成为"雄辩的#34;你的代码应该使用e变量来显示更有用的消息。