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

HotTowel Angular and Immediately-Invoked Function Expression (IIFE)

本文关键字:表达式 函数 IIFE 调用 Angular HotTowel      更新时间:2023-09-26

开始查看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风格指南,但在那里找不到解释。有人可以解释一下我们遵循这种方法有什么好处吗?

附言如果您认为这不是这个问题的正确位置,请指出我正确的位置。

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

John Papa的风格指南中有一个解释:

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

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