在John Papa的款式指南中,他提到需要包装每个零件(function(){..})
。这在我的代码中增加了几行代码,这让我很担心,但还不足以证明一个漫长的解决方法。如果我需要使用IIFE,Angular为什么不使用它?
但是,当我看到实际的角码,如代码$compile和控制器,我没有看到这些声明。
如果Ng不认为它是重要的,那么为什么用IFE隔离我的变量对我来说很重要?或者更好的问题是为什么Angular没有实现IIFE?
在John Papa的款式指南中,他提到需要包装每个零件(function(){..})
。这在我的代码中增加了几行代码,这让我很担心,但还不足以证明一个漫长的解决方法。如果我需要使用IIFE,Angular为什么不使用它?
但是,当我看到实际的角码,如代码$compile和控制器,我没有看到这些声明。
如果Ng不认为它是重要的,那么为什么用IFE隔离我的变量对我来说很重要?或者更好的问题是为什么Angular没有实现IIFE?
角不使用IIFE它包装在
(function(window, document, undefined) {'use strict';
...
})(window, document);
所以这个区分代码,并保护全球/外部环境和整体环境对所有的角码
您可以验证here
那么它是包装整个应用程序的权利?但它不是包裹 各个组件
要回答你的问题,这些组件不是在单独的文件,并包含在单个IIFE
单独的模块,如angular-route
,ng-resource
与angular.module()
命名空间分隔或从全球范围内模块化模式
我认为答案可能是,它取决于。
首先,AngularJS必须公开angular
供用户使用,因此它不能在IIFE内。 (就像jQuery公开$
和jQuery
,虽然它有一个选项,它只公开jQuery
)。然后,如果你决定使用AngularJS,那么AngularJS会在全球范围内暴露一些其他的东西并不奇怪。但到目前为止,我已经使用AngularJS,我只看到angular
被曝光,所有我做的事情,我这样做是因为
angular.module()
.controller()
.directive()
.factory()
.service();
和$compile
没有暴露于全局空间。
您只使用IIFE创建本地范围,以便变量不会成为全局范围的一部分。
为什么?避免污染全球范围并潜在地做一些愚蠢的事情。为什么不这样做呢?那么,它使用它自己的*代码 - 为什么它不能*强迫你?因为没有理由强迫你:我们是大男孩,我们可以照顾自己。 –