第五章:作用域闭包
笔记:
闭包就好像从JavaScript中分离出来的一个充满神秘幻想色彩的未开化世界,只有最勇敢的人才能到达那里。但实际上,它只是一个普通且明显的事实,那就是我们在词法作用域中写代码,而其中的函数也是值,可以随意传来传去。
当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这就产生了闭包。
如果没能认出闭包,也不了解它的工作原理,使用它的过程中就很容易犯错,比如在循环中。但同时闭包也是个非常强大的工具,可以用多种形式来实现模块等模式。
模块有两个主要的特征:
(1) 为创建内部作用域而调用了一个包装函数;
(2) 包装函数的返回值必须至少包括一个对内部函数的引用,这样就会创建涵盖整个包装函数内部作用域的闭包。