首先,闭包是一个函数,是一个什么样的函数呢?是一个有权访问另一个函数作用域里变量的函数。
创建闭包的常用方式是在一个函数内部创建另一个函数。
当某个函数被调用时,会创建一个执行环境及相应的作用域链。后台的每个执行环境都有一个表示变量的对象——变量对象(函数中叫活动对象)。所谓作用域链,本质上就是一个指向变量对象的指针列表。一般来说,当函数执行完毕之后,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行的环境变量)。
闭包:在另一个函数内部定义的函数会将包含函数的活动对象添加到它的作用域链中;在包含函数执行完毕且其执行环境的作用域链销毁后,由于它的内部函数还没有执行完毕,则该包含函数的活动对象依然在内存中,没有被销毁,直到匿名函数被销毁,包含函数的活动对象才会被销毁。