在John Papa的样式指南中,他提到需要在(function(){..})
中包装每个组件。这为我的代码添加了几行,这让我很担心但不足以证明长期解决方案的合理性。
但是,当我查看实际的Angular Code,如$compile和控制器的代码时,我看不到这些声明。
如果Ng认为它不重要,为什么用IIFE隔离我的变量很重要?或者更好的问题是为什么Angular不实施IIFE?
答案 0 :(得分:0)
Angular确实使用IIFE来包装代码
(function(window, document, undefined) {'use strict';
...
})(window, document);
因此,这可以区分并保护所有角度代码的整体/外部环境和环境
您可以验证here
所以它正在包装整个应用程序吗?但它并没有包装 个别组件
要回答您的问题,这些组件不在单独的文件中,并且包含在单个IIFE中
angular-route
,ng-resource
等单独的模块使用angular.module()
命名空间或全局上下文中的模块化模式分隔
答案 1 :(得分:0)
我认为答案可能是,这取决于。
首先,AngularJS必须公开angular
供用户使用,因此它不能在IIFE中。 (就像jQuery公开$
和jQuery
一样,虽然它有一个选项,它只公开jQuery
)。
然后,如果您决定使用AngularJS,那么AngularJS会向全球空间展示其他一些内容并不令人惊讶。但到目前为止,我已经使用过AngularJS,我只看到angular
被暴露,我做的所有事情,我都是这样做的
angular.module()
.controller()
.directive()
.factory()
.service();
和$compile
未暴露于全球空间。
您只使用IIFE创建局部范围,以便变量不会成为全局范围的一部分。