在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
是全局变量。
为了说明这一点,作者提出了一个假想的场景,即当/* do complicated processing... */
发生时,您想让thing
的值全局(通过currentThing
)公开给其他人使用。
处理之后,作者告诉您,在这种假设的情况下,您想将currentThing
恢复为其值,然后再开始处理(该值存储在prevThing
中)。
所有这些都是在错误处理的上下文中发生的。作者创建了一个复杂的场景,告诉您,如果要在计算后重设一些变量,则应将计算包装在try
块中,并在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 - 异常(exception)后清理(如Eloquent JavaScript中所述),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49524964/