我最近读过javascript中的闭包,如果我理解正确的话,那就是内部函数可以访问外部函数中的变量。如果是这样,我应该在什么用例下使用闭包?
答案 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
的值,因为它在闭包函数中被“锁定”。