在每个执行上下文的变量环境中都包含了一个外部引用,用来指向外部的执行上下文,称为outer。
作用域链
当一段代码使用了一个变量的时候,Javascript引擎会先在当前的执行上下文中查找该变量,如果没有查找到,则会继续在其外部的执行上下文中查找,我们把这种查找的链条成为作用域链
词法作用域
词法作用域就是指作用域是由代码中函数声明的位置来决定的,跟函数调用的方式没有关系。
闭包
根据词法作用域的规则,函数内部的函数总是可以访问其外部函数里定义的变量,因此当外部函数结束的时候,内部函数依然可以时候外部函数中的变量。我们就把这样的内部函数称为闭包。
如果闭包使用不正确,会很容易造成内存泄露。