声明“使用严格”对全局匿名函数或控制器内部有区别吗?在AngularJs

时间:2016-09-12 19:45:46

标签: javascript angularjs

考虑到这两个选项:

1

(function(){
 "use strict";
angular.module('someApp.controllers', [])

.controller("ctrl1", ['$scope', function($scope) {

         ....
 }])
 .controller("ctrl2", ['$scope', function($scope) {

         ....
 }])
  .controller("ctrl3", ['$scope', function($scope) {

         ....
 }]);
})();

2

(function(){

angular.module('someApp.controllers', [])

.controller("ctrl1", ['$scope', function($scope) {
        "use strict";
         ....
 }])
 .controller("ctrl2", ['$scope', function($scope) {
        "use strict";
         ....
 }])
 .controller("ctrl3", ['$scope', function($scope) {
        "use strict";
         ....
 }]);
})();

这两者有什么区别吗?其中一个被推荐或被认为是Angular中的“更好的实践”?为什么呢?

2 个答案:

答案 0 :(得分:1)

  

这两者之间有什么区别吗?

嗯,在第一个中,整个IIFE不仅在每个控制器上以严格模式运行 只要您不使用this,只访问少数全局变量和属性并调用某些函数,这并不重要,但如果您在IIFE中犯了错误,则可能会有所帮助。

当然,为了获得更大的利益,写作更少,所以没有理由不使用它。

答案 1 :(得分:0)

第二个片段的唯一好处是IIFE上下文处于松散模式,全局变量可以在IIFE中作为this访问。

对Angular来说并不是一个好处,因为它是客户端的,所以window可以在松散模式下与this互换使用。此外,对于IIFEs a

(function(window){
  ...
})(this);

构造通常用于相同的事情(也可以更好地缩小,但如果脚本在严格模式下用另一个IIFE包装,例如使用Babel时可能会导致麻烦)。