error handling与try .. catch ..终于

我有一个怀疑,我正在使用finally块,我不明白其目的的基本面…

  function myFunc() { try { if (true) { throw "An error"; } } catch (e) { alert (e); return false; } finally { return true; } } 

这个函数将运行catch块,提醒“An error”,但是然后返回true。 为什么不返回错误?

finally块包含在try和catch块执行之后但在try … catch语句之后的语句之前执行的语句。 finally块执行是否抛出exception。 如果抛出exception,则即使没有catch块处理exception,finally块中的语句也会执行。 更多

finally块会一直运行,尝试在你的try块之后返回true

 function myFunc() { try { if (true) { throw "An error"; } return true; } catch (e) { alert (e); return false; } finally { //do cleanup, etc here } } 

最后,当你离开try块时块会执行。 在你的代码中这发生在你返回false的时候。 这将返回值设置为false,并尝试退出该函数。 但首先它必须退出触发finally的try块,并将返回值覆盖为true。

许多人认为每个函数都有一个单一的return语句是一个很好的编程习惯。 考虑在你的函数的开始做一个var retval,并在整个函数中将它设置为true或false,然后构造代码,使其正确地落到底部的单个返回。

 function getTheFinallyBlockPoint(someValue) { var result; try { if (someValue === 1) { throw new Error("Don't you know that '1' is not an option here?"); } result = someValue } catch (e) { console.log(e.toString()); throw e; } finally { console.log("I'll write this no matter what!!!"); } return result; }; getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!"); getTheFinallyBlockPoint(1); 

在浏览器的控制台上运行它,它可能会给你你正在寻找的答案。