[英]Javascript error handling with try .. catch .. finally
我怀疑我正在使用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块执行是否抛出异常。 如果抛出异常,即使没有catch块处理异常,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。
许多人认为每个函数都有一个返回语句是一个很好的编程习惯。 考虑在函数的开头创建一个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);
在浏览器的控制台上运行它,它可能会给你你正在寻找的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.