下面的代码应该声明一个新模块:
(function() {
'use strict';
angular.module('app.avengers', []);
})();
由于我对javascript不熟悉,我很难理解为什么会有多个括号。
我意识到这可能是一个愚蠢的问题,但只是想了解为什么它是用这种方式而不仅仅是:
angular.module('app.avengers', []);
答案 0 :(得分:2)
您感到困惑的语法是anonymous function。
匿名函数((function() {...})();
)的原因是将'use strict'
的范围限制为函数。如果你在函数之外有代码,它将适用于全局范围,这是不合适的。
有关严格模式的更多信息,请访问:http://www.w3schools.com/js/js_strict.asp
答案 1 :(得分:2)
此函数在另一个名为" Immediately Invoked Function Expression"或更常见的IIFE的JavaScript设计模式中声明。
立即调用的函数表达式可用于避免块内的变量提升,防止污染全局环境,同时允许公共访问方法,同时保留函数中定义的变量的隐私。
这对Angular应用程序来说并不是必需的,但它是许多JavaScript开发人员常用的做法。
第一组括号将整个功能块包含为匿名函数。第二个空括号用于调用匿名函数,因此常见的混淆是"自我执行"。本质上,匿名函数执行定义内部函数的任务,然后调用确保实际处理定义。
正如其他人所说,以这种方式定义函数的主要原因是隔离代码,并确保'use strict';
仅应用于函数,而不是全局范围。尽管如此,在这个有限的例子中,编译语'use strict;'
的用途非常有限。
答案 2 :(得分:1)
这就是javascript中立即调用的函数表达式,它与angular JS无关。
第一组parens为你提供一个封闭的词法范围,并返回其中定义的函数对象,第二组parens执行该函数。
如此简单:
答案 3 :(得分:0)
(function() {
...
}}();
是一个"自动执行的匿名函数" (编辑:或者更准确地说,"立即调用函数表达式")。它定义了一个函数:function() { ... }
,然后执行它而没有参数(()
)。它在功能上等同于以下内容,可能更容易理解:
var temp = function() {
...
};
temp();
这用于隔离本地环境中函数中的代码,使其中的任何变量对外界都不可见。
在这种情况下,它用于隔离pragma指令use strict
。