函数的做用域链

在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的时候。在释放变量以前,发现匿名函数仍指向本身的属性。因此就没有释放。

相关文章
相关标签/搜索