Angularjs 如果我需要使用iLife,为什么';你不用它吗?

Angularjs 如果我需要使用iLife,为什么';你不用它吗?,angularjs,Angularjs,在的样式指南中,他提到需要将每个组件包装在(function(){..})中。这在我的代码中增加了几行代码,这让我很担心,但这还不足以证明需要进行长时间的修改 然而,当我查看实际的Angular代码(如and控制器的代码)时,我没有看到这些声明 如果Ng认为变量不重要,为什么我要把变量和生命隔离开来?或者一个更好的问题是为什么Angular不实现IIFE?Angular使用IIFE它将代码封装在其中 (function(window, document, undefined) {'use str

在的样式指南中,他提到需要将每个组件包装在
(function(){..})
中。这在我的代码中增加了几行代码,这让我很担心,但这还不足以证明需要进行长时间的修改

然而,当我查看实际的Angular代码(如and控制器的代码)时,我没有看到这些声明


如果Ng认为变量不重要,为什么我要把变量和生命隔离开来?或者一个更好的问题是为什么Angular不实现IIFE?

Angular使用IIFE它将代码封装在其中

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

})(window, document);
因此,这将区分和保护所有角度代码的全局/外部上下文和整体环境

你可以核实一下


所以它正在包装整个应用程序,对吗?但这并不是在包装 单个组件

为了回答您的问题,这些组件不在单独的文件中,而是包含在单个IIFE中


angular route
ng resource
这样的独立模块用
angular.module()
名称空间或模块模式从全局上下文中分离出来

angular确实使用IIFE将代码封装在其中

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

})(window, document);
因此,这将区分和保护所有角度代码的全局/外部上下文和整体环境

你可以核实一下


所以它正在包装整个应用程序,对吗?但这并不是在包装 单个组件

为了回答您的问题,这些组件不在单独的文件中,而是包含在单个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创建局部范围,这样变量就不会成为全局范围的一部分。

我认为答案可能是,这取决于具体情况

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

然后,如果您决定使用AngularJS,那么AngularJS向全局空间公开其他内容也就不足为奇了。但到目前为止,我已经使用AngularJS,我只看到
angular
被暴露,我做的所有事情,我都是这样做的

angular.module()
    .controller()
    .directive()
    .factory()
    .service();
并且,
$compile
不暴露于全局空间


您只使用iLife创建一个局部作用域,这样变量就不会成为全局作用域的一部分。

所以它是在包装整个应用程序,对吗?但是它并不是像John建议的那样包装单个组件。如果我包装了我的整个应用程序,根据这样的问题,这将被认为是错误的。。。或者换句话说,ngRepeat可能“技术上”污染,比如说ngBind的变量(如果有bug)试图回答您的问题,请参阅更新的答案。我明白所有这些,所以如果我有一个应用程序,为什么我要隔离每个指令,比如第二个链接引用?为什么我不能通过使用angular.module来隔离它们呢?这样就可以正确包装整个应用程序了?但是它并不是像John建议的那样包装单个组件。如果我包装了我的整个应用程序,根据这样的问题,这将被认为是错误的。。。或者换句话说,ngRepeat可能“技术上”污染,比如说ngBind的变量(如果有bug)试图回答您的问题,请参阅更新的答案。我明白所有这些,所以如果我有一个应用程序,为什么我要隔离每个指令,比如第二个链接引用?为什么我不能也使用angular.module来隔离它们?为什么?避免在全球范围内造成污染,避免可能的愚蠢行为。为什么ng不这么做?好吧,它有自己的代码——为什么不强迫你这么做呢?因为没有理由强迫你:我们是大男孩,我们可以照顾自己。为什么?避免在全球范围内造成污染,避免可能的愚蠢行为。为什么ng不这么做?好吧,它有自己的代码——为什么不强迫你这么做呢?因为没有理由强迫你:我们是大男孩,我们可以照顾好自己。