我仍在学习 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 的属性会发生什么情况?
最佳答案
由于该对象是根据函数参数列表中的对象文字创建的,因此在 set()
函数之外没有对该对象的引用。唯一的引用是局部变量 value
,当 set()
函数返回时,该变量就会消失,因此该对象可以被垃圾收集。它的所有属性也可以,因为它们也包含文字,而不是其他变量引用的值。
您没有“将对象转换为字符串”,您只是创建了一个包含对象表示的新字符串。字符串和对象是完全独立的。
关于javascript - 将对象转换为 JSON 字符串并将其置空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38754461/