Javascript js中try-and-catch的问题

Javascript js中try-and-catch的问题,javascript,Javascript,我不明白为什么它总是输出一个错误,而catch块从未执行过 const box = { locked: true, unlock() { this.locked = false; }, lock() { this.locked = true; }, _content: [], get content() { if (this.locked) throw new Error("Locked!"); return this._content;

我不明白为什么它总是输出一个错误,而catch块从未执行过

const box = {
   locked: true,
   unlock() { this.locked = false; },
   lock() { this.locked = true;  },
   _content: [],
   get content() {
     if (this.locked) throw new Error("Locked!");
     return this._content;
   }
 };
 function withBoxUnlocked(funct){
     try{
         console.log(funct);// thinks that everything is fine although there is a mistake
         box.lock();
     }
     catch(e){//why doesn't it execute catch block ?
         console.log("used catch");
         box.unlock();
         withBoxUnlocked(funct);
     }
 }
 withBoxUnlocked(box.content);

在代码的这一点上:

withBoxUnlocked(box.content);
运行时必须调用getter函数。这在调用函数之前发生。因此,永远不会到达函数中的
try/catch

您可以通过更改
withBoxUnlocked()
函数的工作方式来更改内容以演示正在进行的操作:

function withBoxUnlocked(object, property){
     try{
         console.log(object[property]);// thinks that everything is fine although there is a mistake
         box.lock();
     }
     catch(e){//why doesn't it execute catch block ?
         console.log("used catch");
         box.unlock();
         withBoxUnlocked(object, property);
     }
 }
 withBoxUnlocked(box, "content");

这样,在到达
try
子句之前,不会尝试访问该属性。

此时,在代码中:

withBoxUnlocked(box.content);
运行时必须调用getter函数。这在调用函数之前发生。因此,永远不会到达函数中的
try/catch

您可以通过更改
withBoxUnlocked()
函数的工作方式来更改内容以演示正在进行的操作:

function withBoxUnlocked(object, property){
     try{
         console.log(object[property]);// thinks that everything is fine although there is a mistake
         box.lock();
     }
     catch(e){//why doesn't it execute catch block ?
         console.log("used catch");
         box.unlock();
         withBoxUnlocked(object, property);
     }
 }
 withBoxUnlocked(box, "content");
这样,在到达
try
子句之前,不会尝试访问属性