Функция не работает без try catch, почему так важно использование этой конструкции?
Я пытаюсь написать функцию withBoxUnlocked, которая принимает значение функции в качестве аргумента, разблокирует ящик, запускает функцию, а затем гарантирует, что ящик снова будет заблокирован перед возвратом, независимо от того, вернула ли функция аргумента нормально или вызвала исключение.
const box = {
locked: true,
unlock() { this.locked = false; return this.locked},
lock() { this.locked = true; },
_content: [],
get content() {
if (this.locked) throw new Error("Locked!");
return this._content;
}
};
function withBoxUnlocked(body) {
// Your code here.
let locked = box.locked;
if (!locked) {
return body();
}
Вот с чем не работает:
box.unlock();
return body();
box.lock();
Вот код с чем работает:
box.unlock();
try {
return body();
} finally {
box.lock();
}
}
withBoxUnlocked(function() {
box.content.push("gold piece");
});
try {
withBoxUnlocked(function() {
throw new Error("Pirates on the horizon! Abort!");
});
} catch (e) {
console.log("Error raised: " + e);
} finally {
}
console.log(box.locked);
// → true