Javascript 立即调用和立即调用的函数表达式(IIFE)
开始看AngularJS的热毛巾模板,所有那些“为什么”的问题突然出现在我的脑海中。我已经清除了其中的一些,但无法清除这个。即,对控制器使用“立即调用函数表达式(IIFE)”。下面是来自“shell.js”的代码 我不明白为什么这里要用生命。一个原因可能是如果我们不使用生命Javascript 立即调用和立即调用的函数表达式(IIFE),javascript,angularjs,hottowel,Javascript,Angularjs,Hottowel,开始看AngularJS的热毛巾模板,所有那些“为什么”的问题突然出现在我的脑海中。我已经清除了其中的一些,但无法清除这个。即,对控制器使用“立即调用函数表达式(IIFE)”。下面是来自“shell.js”的代码 我不明白为什么这里要用生命。一个原因可能是如果我们不使用生命 var controllerId = "shell" 将具有全局范围(是否正确?)。我已经试着消除这种生活方式,很明显,它解决了任何问题。我看了一遍,但找不到解释。有人能解释一下我们采用这种方法的好处吗 另外,如果你认为这
var controllerId = "shell"
将具有全局范围(是否正确?)。我已经试着消除这种生活方式,很明显,它解决了任何问题。我看了一遍,但找不到解释。有人能解释一下我们采用这种方法的好处吗
另外,如果你认为这不是这个问题的正确位置,请告诉我正确的位置。正如你所说,这是为了防止添加到全局范围。在上面的代码中,如果未使用IIFE,则会将代码
controllerId
和shell
函数添加到全局范围
其中有一个解释:
为什么?:IIFE从全局范围中删除变量。这很有帮助
防止变量和函数声明的寿命超过
在全局范围内,这也有助于避免变量
碰撞
为什么?:当您的代码被缩小并绑定到单个文件中时
部署到生产服务器时,可能会发生以下冲突:
变量和许多全局变量。生活可以保护你免受这两种伤害
通过为每个文件提供可变范围来实现这些目标
这回答了你的问题吗?所以如果我们不使用var controllerId=“shell”,那么我们就不需要生命了?除了声明控制器ID之外,IIFE在控制器声明中还有哪些情况会更好?好的,还有一个地方是我在指令声明中看到的,var app=angular.module('app');当我们需要应用程序的引用时正在使用。如果不是IIFE的局部作用域,那么我们必须命名app1、app2。。。在指令/服务中有十几个名称来引用应用程序,这是一样的。这是为了防止将应用程序添加到全局范围。实际上不应该使用
var-app=
,因为每个文件只应该声明一个指令,所以不需要再次引用app。这在报告中也提到。
var controllerId = "shell"