将模块隐藏在闭包内的原因是什么?

时间:2014-10-28 06:04:50

标签: javascript angularjs module angularjs-scope

举个例子:

(function() {
  angular.module('Base', []).controller('BaseController', function($scope) {
    $scope.mixin1 = function() {};
  })
})();

封装angularjs模块有什么意义?我认为默认是这样。

4 个答案:

答案 0 :(得分:4)

为了避免污染全局命名空间,在IIFE中编译/连接期间包装所有函数,这将产生如下所示的内容:如果你没有封装你的函数,那么你将污染全局范围并且它不好。 read this

(function () {
  angular.module('app', []);

  // MainCtrl.js
  function MainCtrl () {

  }

  angular
    .module('app')
    .controller('MainCtrl', MainCtrl);

  // AnotherCtrl.js
  function AnotherCtrl () {

  }

  angular
    .module('app')
    .controller('AnotherCtrl', AnotherCtrl);

  // and so on...

})();

答案 1 :(得分:1)

一般来说,原因是避免创建全局变量。

但是在你的例子中,如果你总是将代码放在控制器函数中,则不需要。

那么重点是什么?......除了遵循样式模式之外,我没有在示例中看到这一点。

不是依靠手工做那些额外的东西,而是有一些工具可以帮到你。从一个简单的concat(如grunt-contrib-concat或Yeoman的usemin)到更复杂的一个,如Browserify。 (Browserify用于翻译nodejs代码,但它适用于使用AMD样板包装现有的浏览器代码)。

答案 2 :(得分:0)

将这些代码封装在匿名函数/闭包中是一种很好的做法,因为当解析器解释代码时,它内部的所有代码都会被立即调用。 你可能不会使用它,它会工作相同。但是,如果你像这样封装整个代码,你将能够轻松地将它从一个脚本移动到另一个脚本。

答案 3 :(得分:0)