0
    (function() {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];
  provide({
    getDayName: function(number) {
      return names[number];
    },
    getDayNumber: function(name) {
      for (var number = 0; number < names.length; number++) {
        if (names[number] == name)
          return number;
      }
    }
  });
})();

show(getDayNumber("Wednesday"));

现在我正在阅读一个 eloquentjavascript.net,我在那里找到了这样的模块模式。但是我觉得这有点令人困惑,所以你能解释一下为什么我们需要把它放在我们的函数之后 - >() 。据我了解,这是使其自我调用。但是为什么我们需要让它自调用呢?

第二个问题为什么我们需要把我们的函数放在括号中 (function )()。ii 只是语法吗?

4

1 回答 1

3

立即调用函数的意义是双重的:首先,最明显的是,它们立即调用自己。其次,函数中定义的所有变量都封装在该函数中。

例如:

(function () {
    var foo = "bar";
    window.bar = foo;
})();

此函数执行后,bar将可以在函数外部访问,但foo不会。

至于将函数括在括号中,这会导致函数被视为表达式,然后可以执行。

( function (a) { console.log(a); } ) ("foo");

在上面,将记录“foo”。没有括号,你会得到一个语法错误。

编辑

还值得注意的是,您可以使用(并且偶尔会看到)!function而不是(function)使函数成为表达式:

!function () {}();

这与

(function () {})();

除了它将返回值转换为布尔值之外,它被否定,但在大多数情况下无论如何都会被忽略。

于 2013-10-27T13:21:19.657 回答