彻底销毁对象

时间:2015-01-21 13:08:59

标签: javascript jquery angularjs

我正在研究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对象。

1 个答案:

答案 0 :(得分:3)

(我假设JAAulde指出的syntaxother 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; 

...因为的第一行替换对旧对象的引用,并引用了新创建的对象。