闭包

高程:
有权访问另一个函数作用域内变量的函数

function createComparisonFunction(propertyName) {
    return function (object1, object2) { //可以访问createComparisonFunction函数内的propertyName变量
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];

        if (value1 < value2) {
            return -1;
        } else if (value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    };
}
  1. 在创建函数的时候,会创建作用域链,执行的时候拷贝给执行环境
  2. 在函数被调用时,会创建一个执行环境及其相应的作用域链
  3. 函数被调用时用arguments和参数来初始化活动对象,上一级的作用域位于第2位,上上一级位于第3位
  4. 一般来讲,函数执行完毕,局部执行环境会被销毁,内存中仅保存全局作用域
  5. 闭包中的匿名函数被返回后,它的作用域链被初始化位外部函数变量对象和全局变量对象,外部函数执行完毕后,其变量对象也不会被销毁,因为匿名函数的作用域链仍然在引用它
  6. 将匿名函数的引用赋值为null,可以取消对匿名函数对引用,销毁匿名函数引用对上一级变量对象
    犀牛书:
    函数对执行用到了作用域链,而作用域链是函数定义对时候决定对