如果我需要使用IIFE,为什么Angular不使用它?

时间:2016-03-16 14:37:18

标签: angularjs

John Papa的样式指南中,他提到需要在(function(){..})中包装每个组件。这为我的代码添加了几行,这让我很担心但不足以证明长期解决方案的合理性。

但是,当我查看实际的Angular Code,如$compile和控制器的代码时,我看不到这些声明。

如果Ng认为它不重要,为什么用IIFE隔离我的变量很重要?或者更好的问题是为什么Angular不实施IIFE?

2 个答案:

答案 0 :(得分:0)

Angular确实使用IIFE来包装代码

(function(window, document, undefined) {'use strict';
...

})(window, document);

因此,这可以区分并保护所有角度代码的整体/外部环境和环境

您可以验证here

  

所以它正在包装整个应用程序吗?但它并没有包装   个别组件

要回答您的问题,这些组件不在单独的文件中,并且包含在单个IIFE中

angular-routeng-resource等单独的模块使用angular.module()命名空间或全局上下文中的模块化模式分隔

答案 1 :(得分:0)

我认为答案可能是,这取决于。

首先,AngularJS必须公开angular供用户使用,因此它不能在IIFE中。 (就像jQuery公开$jQuery一样,虽然它有一个选项,它只公开jQuery)。

然后,如果您决定使用AngularJS,那么AngularJS会向全球空间展示其他一些内容并不令人惊讶。但到目前为止,我已经使用过AngularJS,我只看到angular被暴露,我做的所有事情,我都是这样做的

angular.module()
    .controller()
    .directive()
    .factory()
    .service();

$compile未暴露于全球空间。

您只使用IIFE创建局部范围,以便变量不会成为全局范围的一部分。