Javascript js中try-and-catch的问题
我不明白为什么它总是输出一个错误,而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;
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
子句之前,不会尝试访问属性