使用依赖注入时,通过引用调用服务和直接调用服务有区别吗?

When using Dependance Injection, is there a difference between of calling a service by reference or directly?

问题:

这两个使用工厂服务的例子有什么区别吗?

示例 1:

angular.module('ramenBattleNetworkApp')
  .controller('MainCtrl', function ($scope, Helpers) {
     var testArray = [1,2,3,4];
     // pass Helpers to var helpers
     var helpers = Helpers;
     helpers.arrayRotate(testArray, true);
  });

示例 2:

angular.module('ramenBattleNetworkApp')
  .controller('MainCtrl', function ($scope, Helpers) {
     var testArray = [1,2,3,4];
     Helpers.arrayRotate(testArray, true);
  });

工厂:助手

angular.module('ramenBattleNetworkApp')
  .factory('Helpers', function () {     
    var Helpers = {};

    Helpers = {
      history: [],
      arrayRotate: function(arr, reverse){
        Helpers.history.push(arr);
        if(reverse)
          arr.push(arr.shift());
        else
          arr.unshift(arr.pop());
        return arr;
      }
    };
    return Helpers;
  });
});

为什么我想知道? 过去,我注意到在工厂内部调用函数并在控制器之间传递它们会对性能造成很大影响 (示例 1),但我一直不知道为什么。

虽然当前的这个例子比较人为,但我有一个假设,即工厂每次都创建一个新对象。如果多个控制器 $watch() 用于更改工厂 Helpers.history 并且工厂是一个更大的对象;也许这就是性能受到影响的原因。最后,也许通过将其保存到控制器中的局部变量中,我可以控制

或者我不知道我在说什么。

Angular 的 DI 系统在应用程序的任何地方注入相同的服务实例。是单例。

因此,将服务分配给局部变量在性能上应该没有任何差异:

var helper = Helper;
helper.doSomething();

并直接使用该服务:

Helper.doSomething();