对于那些对 JavaScript 有些经验,但是也许从没全面掌握闭包概念的人来说,理解闭包 看起来就像是必须努力并作出牺牲才能到达的涅槃状态。

    回想几年前我对 JavaScript 有了牢固的掌握,但是不知道闭包是什么。它暗示着这种语言有着另外的一面,它许诺了甚至比我已经拥有的还多的力量,它取笑并嘲弄我。我记得我通读早期框架的源代码试图搞懂它到底是如何工作的。我记得第一次“模块模式”的某些东西融入我的大脑。我记得那依然栩栩如生的 啊哈! 一刻。

    那时我不明白的东西,那个花了我好几年时间才搞懂的东西,那个我即将传授给你的东西,是这个秘密:在 JavaScript 中闭包无所不在,你只是必须认出它并接纳它。闭包不是你必须学习新的语法和模式才能使用的特殊的可选的工具。不,闭包甚至不是你必须像卢克在原力中修炼那样,一定要学会使用并掌握的武器。

    闭包是依赖于词法作用域编写代码而产生的结果。它们就这么发生了。要利用它们你甚至不需要有意地创建闭包。闭包在你的代码中一直在被创建和使用。你 缺少 的是恰当的思维环境,来识别,接纳,并以自己的意志利用闭包。

    启蒙的时刻应该是:哦,闭包已经在我的代码中到处发生了,现在我终于 看到 它们了。理解闭包就像是尼欧第一次见到母体。