函數的做用域鏈

在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的時候。在釋放變量以前,發現匿名函數仍指向本身的屬性。因此就沒有釋放。

相關文章
相關標籤/搜索