HotTowel Angular和立即调用的函数表达式(IIFE)

时间:2015-01-08 06:15:53

标签: javascript angularjs hottowel

开始查看AngularJS的HotTowel模板以及所有那些“为什么”的问题突然出现在我脑海中。我已经清除了其中一些,但无法清除这一点。即控制器使用“立即调用函数表达式(IIFE)”。以下是“shell.js”

中的代码
    (function () { 
        'use strict';

        var controllerId = 'shell';
        angular.module('app').controller(controllerId,
            ['$rootScope', 'common', 'config', shell]);

        function shell($rootScope, common, config) {
            var vm = this;
      //rest of the code omitted 

我无法弄清楚为什么在这里使用IIFE。一个原因可能是我们不使用IIFE,那么

var controllerId = "shell"

将具有全局范围(这是正确的吗?)。我试图删除IIFE样式,显然它正在解决任何问题。我经历了AngularJS Style Guide,但在那里找不到解释。有人可以通过这种方法解释我们获得了哪些好处?

P.S。如果您认为这不是这个问题的正确位置,请将我指向正确的位置。

1 个答案:

答案 0 :(得分:2)

正如您所说,这是为了防止增加全球范围。在您上面的代码controllerId中,如果不使用IIFE,shell函数将被添加到全局范围。

John Papa's style guide中有一个解释:

  

为什么?:IIFE从全局范围中删除变量。这有帮助   防止变量和函数声明的生存时间超过   预计在全球范围内,这也有助于避免变数   碰撞。

     

为什么?:当您的代码缩小并捆绑到单个文件中时   部署到生产服务器,您可能会发生冲突   变量和许多全局变量。 IIFE保护您免受两者的伤害   通过为每个文件提供变量范围来实现这些目的。