Блок finally всегда выполняет last, а оператор return возвращает управление туда, откуда был сделан вызов функции. При использовании вместе изнутри блока try / finally функция кажется возвращаемой дважды, а не один раз, при использовании внутри блока if-else возвращаемое значение блока finally вступает в силу. Один и тот же вызов метода возвращается дважды?
function print(value) {
console.log(value);
return value;
}
function testWrapped() {
try {
return print(true);
} finally {
return print(false);
}
}
function test() {
try {
return true;
} finally {
return false;
}
}
console.log("Result with wrapped value");
testWrapped();
console.log("Result when used inside an if statement:");
if (test()) {
console.log("true");
} else {
console.log("false");
}
приведенный выше код выдает следующий вывод:
Result with wrapped value
true
false
Result when used inside an if statement:
false