闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
在另一个函数内部定义的函数会将包含函数(即外部函数)的活动对象添加到它的作用域链中。(函数作用域链详见:函数的执行过程)
匿名函数从 createComparisonFunction() 中被返回后,它的作用域链被初始化为包含 createComparisonFunction() 函数的活动对象和全局变量对象。这样匿名函数就可以访问在 createComparisonFunction() 中定义的所有变量。
更重要是, createComparisonFunction() 函数在执行完毕后,起活动对象也不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。
换句话说:当 createComparisonFunction() 函数返回后,其执行环境的作用域链会被销毁,但它的活动对象仍然会留在内存中,直到匿名函数被销毁后,createComparisonFunction() 的活动对象才会被销毁。
闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。