我正在研究angularjs $ modal。我将值存储在控制器中,如下所示,
if($scope.mediacontent){
delete $scope.mediacontent;}
$scope.mediacontent[$scope.slider_url] =media_data;
$scope.mediacontent[$scope.slider_url][img_no].active=true;
现在,当下次打开$ modal时,我想要销毁媒体内容对象但是delete
对象没有完全被销毁。
如何彻底销毁删除$scope.mediacontent
对象。
答案 0 :(得分:3)
(我假设JAAulde指出的syntax和other errors并非在您的代码中,或者您已修复它。)
但
delete
对象未完全销毁......
delete
没有发布对象;它删除了属性。如果您要删除的属性是对象的唯一引用,则该对象将有资格进行垃圾回收。实际垃圾收集何时以及如何发生取决于JavaScript引擎(它不太可能立即发生)。如果你有对该对象的其他引用,那么删除该属性不会使其符合GC的条件(因为其他引用它)。
但是,如果您要为该属性分配新值,则delete
没有理由;分配新值也会释放对前一个对象的引用,使其符合GC的条件(假设没有其他内容可以引用它)。
,例如,此代码将完全释放旧对象(除非其他东西有引用):
$scope.mediacontent = {};
$scope.mediacontent[$scope.slider_url] = media_data;
$scope.mediacontent[$scope.slider_url][img_no].active = true;
...因为的第一行替换对旧对象的引用,并引用了新创建的对象。