在js中进行函数的调用的时候,会为每一个函数添加一个SCPOE属性,经过这个属性laugh指向一块内存。这快内存中包含全部上下文使用的变量java
当在某个函数中调用新的函数的时候,新函数会有一个做用域来指向原有的SCOPE和新增的SCOPE。这样就造成了一个做用域链。闭包
function compareObject(prop){函数
return function(obj1,obj2){blog
if(obj1[prop]>obj2[prop]){return 1}内存
else if(obj1[prop]<ob22[prop]){return -1}作用域
else{io
return 0;function
}匿名函数
}变量
}
var o1 = {name:"Amos",age:22};
var 02 = {name:"Ada",age:66};
// 在java中 下面这行代码执行完毕了以后,传过去的name的做用域当函数执行完毕确定也就消失了。可是在js中经过返回这个函数。就能够直接把“name”的做用域
// 扩大。这样的方式就叫作闭包
var compare = compareObject("name");
var rel = fn(o1,o2);
内存分析:
当执行完compareObject的时候。在释放变量以前,发现匿名函数仍指向本身的属性。因此就没有释放。