函数的作用域链
在js中进行函数的调用的时候,会为每个函数添加一个SCPOE属性,通过这个属性laugh指向一块内存。这快内存中包含所有上下文使用的变量
当在某个函数中调用新的函数的时候,新函数会有一个作用域来指向原有的SCOPE和新增的SCOPE。这样就形成了一个作用域链。
function compareObject(prop){
return function(obj1,obj2){
if(obj1[prop]>obj2[prop]){return 1}
else if(obj1[prop]<ob22[prop]){return -1}
else{
return 0;
}
}
}
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的时候。在释放变量之前,发现匿名函数仍指向自己的属性。所以就没有释放。
浙公网安备 33010602011771号