当ui-router改变状态时,角度控制器范围不会破坏变量

时间:2016-05-12 04:06:46

标签: javascript angularjs garbage-collection angular-ui-router heap-memory

在我的应用程序中,我注意到当我更改状态时,$ scope变量仍然存在并记录超时。为什么是这样?如何完全删除它以免占用堆内存?

意味着,在从控制器改变状态后

$scope.$on("$destroy",function(){
    setTimeout(function(){
        console.log($scope.whatever);
    },10000);
});

$ scope.whatever仍然记录意味着它从未被删除!到底是怎么回事?我认为破坏事件也会破坏范围内的所有内容?

1 个答案:

答案 0 :(得分:1)

原因是,通过console.logging超时中的$ scope变量,我引用它,所以javascript将避免范围内的垃圾收集,直到它执行并且不再被引用,在javascript中没有弱引用就像在java中一样。

应该不惜一切代价避免这种情况,因为它会产生巨大的内存泄漏!确保在销毁范围时不会在任何地方引用变量!