函数的作用域链

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

 

 

 

 

 

posted on 2013-07-02 14:17  菜鸟半只  阅读(145)  评论(0)    收藏  举报

导航