我怀疑我错误地使用了finally
块,并且我不理解其目的的基本原理......
function myFunc() {
try {
if (true) {
throw "An error";
}
} catch (e) {
alert (e);
return false;
} finally {
return true;
}
}
此函数将运行catch
块,警告“错误”,但随后返回true。为什么不返回假?
答案 0 :(得分:83)
finally块包含在try和catch块执行之后但在try ... catch语句之后的语句之前执行的语句。 finally块执行是否抛出异常。如果抛出异常,即使没有catch块处理异常,finally块中的语句也会执行。 more
finally
阻止将始终运行,请在true
阻止后返回try
function myFunc() {
try {
if (true) {
throw "An error";
}
return true;
} catch (e) {
alert (e);
return false;
} finally {
//do cleanup, etc here
}
}
答案 1 :(得分:10)
最后,当您离开try块时执行块。在你的代码中,这会在你返回false时发生。这会将返回值设置为false并尝试退出该函数。但首先它必须退出触发finally的try块并将返回值覆盖为true。
许多人认为每个函数都有一个返回语句是一个很好的编程习惯。考虑在函数的开头创建一个var retval,并在整个函数中将其设置为true或false,然后构造代码,使其正确地落到底部的单个return中。
答案 2 :(得分:1)
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);
在您的浏览器控制台上运行此操作,它可能会为您提供您正在寻找的答案。