返回

闭包:JavaScript 的灵活助手

前端

在计算机程序的世界里,闭包(Closure)是一个妙不可言的概念,它赋予函数一种独特的能力:能够接触和操作定义它时的词法作用域,哪怕该函数已经被定义好了。闭包是一种将函数和它周围环境(包括词法作用域和作用域链)结合到一起的技术,允许函数“携带”并使用闭包内定义的局部环境。

闭包的运作机制是建立在 JavaScript 的词法作用域(Lexical Scope)之上。词法作用域的本质在于,函数可以读取和操作它定义时所在的词法作用域中定义的任何其他局部(lexical)和全局(global)作用域的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical)和全局(global)作用域中的任何其他局部(lexical