所以说例如我有一家工厂:
app.factory('exposeService', function() {
var service = {};
service.expose = function(name, callback) {
service[name] = callback;
};
service.destroyExposed = function(name) {
if (service[name]) {
service[name] = null;
}
};
return service;
})
这个工厂非常简单,它有两个方法来设置一个回调,另一个来销毁所述回调。控制器将使用此服务并“暴露”。其他服务现在可以直接调用的方法。这是一个例子:
app.controller("simpleController", ["exposeService", "$scope", function(exposeService, $scope) {
var vm = this;
vm.counter = 0;
var exposedCallback = function() {
console.log('This is what I need to access: ', vm);
vm.counter++;
};
playerOverlayService.expose('exposedCallback', exposedCallback);
$scope.$on('$destroy', function() {
playerOverlayService.destroyExposed('onSystemMessage');
});
}]);
只要服务决定适合调用回调,该控制器就需要递增计数器。现在我的问题是,如果我在销毁控制器时销毁对回调的引用,那么回调内的范围是否会泄漏内存,因为它不再被使用或引用?或者,destroyExposed方法是否足以告诉GC它可以清理?