2015-10-14 3 views
0

Будучи относительно новым человеком для AngularJS, я хотел бы узнать больше о закрытии в AngularJS и о том, как использовать их, чтобы избежать утечки памяти.Утечка утечки памяти упрямаяJS?

Правильно ли я думаю, что приведенный ниже код утечки памяти, поскольку ссылки на 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 и обув?

ответ

0

Javascript очистит область действия и функции обратного вызова, если объект области недоступен и больше не ссылается на другой объект или функцию.

Mark-and-sweep algorithm

Этот алгоритм уменьшает определение «объект не требуется больше», чтобы «объект недоступен».

Этот алгоритм предполагает знание набора объектов, называемых корнями (В JavaScript корень является глобальным объектом). Периодически из этих корней будет начинаться сборщик мусора , найти все объекты, на которые ссылаются , и все объекты, на которые ссылаются , и т. Д. Начиная с корней, сборщик мусора будет таким образом найти все доступные объекты и собрать все недосягаемые объекты.

Смежные вопросы