Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 立即调用和立即调用的函数表达式(IIFE)_Javascript_Angularjs_Hottowel - Fatal编程技术网

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

Javascript 立即调用和立即调用的函数表达式(IIFE),javascript,angularjs,hottowel,Javascript,Angularjs,Hottowel,开始看AngularJS的热毛巾模板,所有那些“为什么”的问题突然出现在我的脑海中。我已经清除了其中的一些,但无法清除这个。即,对控制器使用“立即调用函数表达式(IIFE)”。下面是来自“shell.js”的代码 我不明白为什么这里要用生命。一个原因可能是如果我们不使用生命 var controllerId = "shell" 将具有全局范围(是否正确?)。我已经试着消除这种生活方式,很明显,它解决了任何问题。我看了一遍,但找不到解释。有人能解释一下我们采用这种方法的好处吗 另外,如果你认为这

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

我不明白为什么这里要用生命。一个原因可能是如果我们不使用生命

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"