2015-10-14 90 views
0

作爲AngularJS的一個相對較新的人員,我想了解更多關於AngularJS中的閉包以及如何使用它們來避免內存泄漏的問題。AngularJS關閉內存泄漏?

我是否認爲下面的代碼泄漏內存,因爲func1,func2和foo的引用沒有被回調函數釋放?

angular 
    .module('Mod1'). 
    .controller('Ctrl1', ['$scope', 'foo', 'Service1', function($scope, foo, Service1) { 

    var func1 = function() { 
     // do stuff 
    } 

    $scope.func2 = function() { 
     // do more stuff 
    } 

    Service1.loadData().then(function(data) { 
     func1(); 
     $scope.func2(); 
     foo.func3(); 
    }); 

    $scope.$watch('blah', function() { 
     func1(); 
     $scope.func2(); 
     foo.func3(); 
    }); 
}]); 

或將回調進行範圍上發佈,因此摧毀自動清除到FUNC1,FUNC2和Foo最後引用?

回答

0

當範圍對象不可訪問且不再被其他對象或函數引用時,Javascript將清除範圍和回調函數。

Mark-and-sweep algorithm

此算法減少的「不需要的對象 了」發送「的對象是不可達」的定義。

該算法假設知道一組對象,稱爲根 (在JavaScript中,根是全局對象)。定期地, 垃圾收集器將從這些根開始,找到從這些根引用 的所有對象,然後從 引用這些的所有對象等。從根開始,垃圾收集器將因此 找到所有可到達的對象,並且收集所有不可達的物體。