首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在js中使用try和catch的问题

在js中使用try和catch的问题
EN

Stack Overflow用户
提问于 2020-04-12 19:46:30
回答 1查看 32关注 0票数 1

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

代码语言:javascript
运行
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2020-04-12 19:48:45

在代码中的这一点:

代码语言:javascript
运行
复制
withBoxUnlocked(box.content);

运行时必须调用getter函数。这发生在函数被调用之前的。因此,函数中的try/catch永远不会到达。

您可以通过更改withBoxUnlocked()函数的工作方式来进行更改,以演示所发生的事情:

代码语言:javascript
运行
复制
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子句之前,不会尝试访问该属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61170910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档