在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/

10-10 00:40