是 JavaScript 的一个难点但又功能强大,很多高级应用都要依靠它实现。
闭包是 JavaScript 的重要特性,是迈向高级 JavaScript 程序员的必经之路。
虽然不完全懂,或多或少也可以使用它。
闭包以很自然的形式,把我们的目的和所涉及的资源全给自动打包在一起。
闭包是代码块和创建该代码块的上下文中数据的结合。
闭包描述的函数执行过程中动态环境,是运行期的,动态的概念。
记住:内部函数可以访问到外部函数的变量。
JavaScript 采用的是静态/词法作用域。
静态/词法作用域:函数在声明的时候就已经保存了其上层的作用域,而非调用的时候动态获取。
函数的外层上下文作用域,在函数声明是就已经确定了,和它在何处调用没有关系。
定义:一个VO[variable object]是关联上下文执行环境的一系列数据。它是与上下文关系密切的一个特殊对象,存储了在上下文中定义的变量和函数声明。
定义:当一个函数被调用时,会创建一个 AO(activation object)。除了包含变量和函数声明外,它还包括参数和一个特殊的 arguments 对象。也可以把 AO 理解为函数上下文的 VO。
