开始查看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。如果您认为这不是这个问题的正确位置,请将我指向正确的位置。
答案 0 :(得分:2)
正如您所说,这是为了防止增加全球范围。在您上面的代码controllerId
中,如果不使用IIFE,shell
函数将被添加到全局范围。
John Papa's style guide中有一个解释:
为什么?:IIFE从全局范围中删除变量。这有帮助 防止变量和函数声明的生存时间超过 预计在全球范围内,这也有助于避免变数 碰撞。
为什么?:当您的代码缩小并捆绑到单个文件中时 部署到生产服务器,您可能会发生冲突 变量和许多全局变量。 IIFE保护您免受两者的伤害 通过为每个文件提供变量范围来实现这些目的。