你如何决定何时在javascript中使用闭包?

时间:2013-12-02 17:16:36

标签: javascript closures

我最近读过javascript中的闭包,如果我理解正确的话,那就是内部函数可以访问外部函数中的变量。如果是这样,我应该在什么用例下使用闭包?

1 个答案:

答案 0 :(得分:1)

当您考虑编写函数时,但意识到该函数需要执行一些内部状态保持以确定其操作。应该在变量中存储,读取和修改状态 - 但是你不希望该变量存在于函数之外(如果其他函数可以篡改此函数的状态,则可能出错),同时你可以在函数内部定义变量,因为每次调用它时该变量都将被重置。

闭包实际上只是用于锁定直接范围内的变量。最简单的例子可能是切换:

var lightSwitch = ( function closure(){
  var isLightOn = false;

  return function flickLightSwitch(){
    isLightOn = !isLightOn;

    alert( isLightOn );
  }
}() );

想象一下,你在光线昏暗的房间里,你无法判断灯是打开还是关闭,除非轻弹开关以查看差异。执行代码时,closure函数立即运行,将值false分配给isLightOn,并将函数flickLightSwitch分配给顶部的变量lightSwitch 。现在每当flickLightSwitch函数执行时(由它分配给lightSwitch的变量调用),isLightOn就会变得与之前的相反,并且用户会收到新的警告。值。外部代码无法读取或修改isLightOn的值,因为它在闭包函数中被“锁定”。