为什么Javascript语法使用多个括号?

时间:2015-04-22 01:13:36

标签: javascript angularjs

下面的代码应该声明一个新模块:

(function() {
   'use strict';

    angular.module('app.avengers', []);
})();

由于我对javascript不熟悉,我很难理解为什么会有多个括号。

我意识到这可能是一个愚蠢的问题,但只是想了解为什么它是用这种方式而不仅仅是:

    angular.module('app.avengers', []);

4 个答案:

答案 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执行该函数。

如此简单:

  1. 定义
  2. 执行

答案 3 :(得分:0)

(function() {
  ...
}}();

是一个"自动执行的匿名函数" (编辑:或者更准确地说,"立即调用函数表达式")。它定义了一个函数:function() { ... },然后执行它而没有参数(())。它在功能上等同于以下内容,可能更容易理解:

var temp = function() {
  ...
};
temp();

这用于隔离本地环境中函数中的代码,使其中的任何变量对外界都不可见。

在这种情况下,它用于隔离pragma指令use strict