在我的应用程序中,我注意到当我更改状态时,$ scope变量仍然存在并记录超时。为什么是这样?如何完全删除它以免占用堆内存?
意味着,在从控制器改变状态后
$scope.$on("$destroy",function(){
setTimeout(function(){
console.log($scope.whatever);
},10000);
});
$ scope.whatever仍然记录意味着它从未被删除!到底是怎么回事?我认为破坏事件也会破坏范围内的所有内容?
答案 0 :(得分:1)
原因是,通过console.logging超时中的$ scope变量,我引用它,所以javascript将避免范围内的垃圾收集,直到它执行并且不再被引用,在javascript中没有弱引用就像在java中一样。
应该不惜一切代价避免这种情况,因为它会产生巨大的内存泄漏!确保在销毁范围时不会在任何地方引用变量!