1
當我正在學習創建對象的方法時,我發現了持久構造函數模式,它依賴於閉包和創建私有變量的方式。閉包如何訪問析構變量?
所以例如:
function Person(name, age, job){
var o = new Object();
o.sayName = function(){
alert(name);
};
return o;
}
var m = new Person('joe',20, 'anything');
m.sayName(); // 'joe'
name
是隻能由m.sayName
訪問私有變量。
另外我知道當函數完成執行時垃圾收集器會執行內存清除操作,因此所有局部變量都將被釋放。
所以我的問題是如何m.sayName
可以訪問name
而其內存已被釋放後,構造函數完成執行。
這意味着,'sayName'有'name'參考? –
@OmarElawady是的,是間接的。它對包含'name'的作用域有一個隱藏的引用。 –
所以只需在函數中附加一個變量的名稱就可以創建對它的引用? –