HotTowel Angular 和立即调用的函数表达式 (IIFE)
HotTowel Angular and Immediately-Invoked Function Expression (IIFE)
开始查看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,controllerId
和 shell
函数将被添加到全局范围内。
John Papa的风格指南中有一个解释:
为什么?:IIFE 从全局范围中删除变量。这有助于 防止变量和函数声明的生存时间超过 在全局范围内预期,这也有助于避免变量 碰撞。
为什么?:当您的代码被缩小并捆绑到单个文件中时 部署到生产服务器,您可能会发生冲突 变量和许多全局变量。IIFE可以保护您免受两者的侵害 通过为每个文件提供可变范围来。
相关文章:
- 调用正则表达式匹配的函数
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 参数更改时,角度表达式中的函数不更新
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 是否有任何Javascript函数从指定的索引中进行正则表达式匹配
- 能够在定义函数表达式之前使用它
- 函数表达式,返回回调函数
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 函数声明与函数表达式之间的性能差异
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- 立即调用函数表达式(IIFE)相对于普通函数的优势
- 如何通过jsp表达式标记将java字符串变量传递给javascript函数
- 用正则表达式在js中进行函数修剪
- 错误-应为赋值或函数调用,但实际看到的却是表达式
- Javascript错误正则表达式不是函数
- “期望赋值或函数调用,而是看到了表达式.” - 不必要的控制台.log
- 为过滤器创建javascript正则表达式函数
- 如何修复这个正则表达式函数
- 传递变量来替换正则表达式函数
- 正则表达式函数4个字母和4个数字