我仍然在学习如何在javascript中使用引用和垃圾收集器,因此在我的工作中减少了膨胀和泄漏。我创建了一个包含对象的工厂,该值可以传递给它或从中获取。
.factory('lib', function(){
var lib={};
return {
set: function(id,value,isObj){
if(isObj){
lib[id]=JSON.stringify(value);
}else{
lib[id]=value;
}
},
del: function(id){
lib[id]=null;
}
};
})
.controller('testCtrl',function(lib,$timeout){
lib.set("1",{'name':'James','sureName':'Potter'},true);
$timeout(function(){
lib.del("1");
},1000);
})
所以我的问题是;通过将我的obj转换为字符串,后来转换为字符串,现在作为空值。我的原始obj是否可以访问并被垃圾收集器收集? obj的属性发生了什么,我试图变成字符串?
答案 0 :(得分:0)
由于对象是从函数参数列表中的对象文字创建的,因此没有对set()
函数之外的对象的引用。唯一的引用是局部变量value
,当set()
函数返回该变量消失时,对象可以被垃圾收集。所有它的属性都可以,因为它们也包含文字,而不是其他变量引用的值。
您没有将对象转换为字符串",您只需创建一个包含对象表示的新字符串。字符串和对象完全独立。