閉包的本質就是:函數A的內部函數B被A以外的函數C調用了。這樣一個閉包的函數在返回時有沒有釋放資源的棧區。 閉包
瞭解js的閉包首先要清楚變量做用域的問題函數
那麼想要從外部獲取內部的變量值該如何作呢?spa
咱們能夠在demo02中定義一個內部函數:code
var index02 = 3;
function inner02(){
alert(index02);
}
return inner02;
}
var getnum = demo02();//至關於獲取到了inner02
getnum();//彈出結果3對象
inner02就是閉包。blog
addone=function(){
index03++;
}
function inner03(){
alert(index03);
}
return inner03;
}
var getnum = demo03();
getnum();//彈出結果99
addone();//index03的值增長1 addone自己是全局變量它的值是一個匿名函數,而匿名函數自己也是閉包,能夠在函數外部對函數內部的變量進行操做。
getnum();//彈出結果100生命週期
因此濫用閉包可能致使內存泄露,由於閉包使得變量一直在內存中不會被垃圾回收。內存
若是把demo03當作對象,index03表明屬性,inner03表明公開的方法,也要注意不要隨便修改內部的屬性值。 資源