gpt4 book ai didi

javascript - 异常后的清理(如 Eloquent JavaScript 中所述)

转载 作者:行者123 更新时间:2023-12-03 02:12:00 25 4
gpt4 key购买 nike

在《Eloquent JavaScript》第一版中,第 67 页的“异常后清理”子章节下有以下代码:

var currentThing = null;

function processThing(thing) {
var prevThing = currentThing;
currentThing = thing;
/* do complicated processing... */
currentThing = prevThing;
}

最终将prevThing重新分配给currentThing的逻辑是什么?

这里,我们已经将 currentThing 赋值给 prevThing,然后将 currentThing 更改为 thing,那又怎样是上次重新分配的味道吗?

最佳答案

最后一个赋值并非无用,因为 currentThing 是一个全局变量。

为了说明这一点,作者提出了一些假设场景,暂时,当 /* 进行复杂处理... */ 发生时,您希望获得 的值>thing 全局公开(通过 currentThing)供其他人使用。

处理后,作者告诉我们,在这种假设场景中,您希望将 currentThing 恢复到处理开始之前的值(存储在 prevThing 中的值)。

所有这些都发生在错误处理的上下文中。作者创造了如此复杂的场景是为了告诉你,如果你想在计算后重置某个变量,你应该将计算包装在 try block 中finally中进行重置,如下所示:

var currentThing = null;

function processThing(thing) {
var prevThing = currentThing;
currentThing = thing;
try {
/* do complicated processing... */
} finally {
// now you'll reset currentThing to its previous value,
// no matter if the complicated processing errors or not
currentThing = prevThing;
}
}

这样复杂处理可能引发的任何错误都不会影响 currentThing 的重置。

关于javascript - 异常后的清理(如 Eloquent JavaScript 中所述),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49524964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com