Функция не работает без 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

Ответы (0 шт):