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'的作用域有一个隐藏的引用。 –
所以只需在函数中附加一个变量的名称就可以创建对它的引用? –