每一段代码的执行都会存在一个执行上下文环境中。任何一个执行上下文环境又是存在于整体的执行上下文环境中。
根据栈的先进后出的特点,全局环境产生的执行上下文环境会最先入栈。当新函数调用产生的上下文环境也是开始入栈。该函数调用完成后,该执行上下文环境就会出栈销毁,从而开始执行之前的上下文环境。
闭包:拥有许多变量和绑定这些变量执行上下文环境的表达式,一般是一个函数。
1、函数拥有外部变量的引用,在函数返回时,该变量还是处在活跃状态【变量未被销毁】
2、闭包作为一个函数返回时,自己的上下文环境没有被销毁,依旧处于执行上下文环境中。
很明显的就是:在JavaScript中存在一种内部函数,就是函数声明和函数表达式都在另一个函数的函数体内,内部函数可以访问外部函数声明的变量,当外部函数被调用时 就形成了闭包。