对于那些还蒙在鼓里的人来说,闭包就像在 JavaScript 内部被隔离开的魔法世界,只有很少一些最勇敢的灵魂才能到达。但是它实际上只是一个标准的,而且几乎明显的事实 —— 我们如何在函数即是值,而且可以被随意传递的词法作用域环境中编写代码,
闭包就是当一个函数即使是在它的词法作用域之外被调用时,也可以记住并访问它的词法作用域。
如果我们不能小心地识别它们和它们的工作方式,闭包可能会绊住我们,例如在循环中。但它们也是一种极其强大的工具,以各种形式开启了像 模块 这样的模式。
模块要求两个关键性质:1)一个被调用的外部包装函数,来创建外围作用域。2)这个包装函数的返回值必须包含至少一个内部函数的引用,这个函数才拥有包装函数内部作用域的闭包。
现在我们看到了闭包在我们的代码中无处不在,而且我们有能力识别它们,并为了我们自己的利益利用它们!