高程:
有权访问另一个函数作用域内变量的函数
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;
}
};
}
- 在创建函数的时候,会创建作用域链,执行的时候拷贝给执行环境
- 在函数被调用时,会创建一个执行环境及其相应的作用域链
- 函数被调用时用arguments和参数来初始化活动对象,上一级的作用域位于第2位,上上一级位于第3位
- 一般来讲,函数执行完毕,局部执行环境会被销毁,内存中仅保存全局作用域
- 闭包中的匿名函数被返回后,它的作用域链被初始化位外部函数变量对象和全局变量对象,外部函数执行完毕后,其变量对象也不会被销毁,因为匿名函数的作用域链仍然在引用它
- 将匿名函数的引用赋值为null,可以取消对匿名函数对引用,销毁匿名函数引用对上一级变量对象
犀牛书:
函数对执行用到了作用域链,而作用域链是函数定义对时候决定对