模块模式或模块化

时间:2013-10-27 13:11:54

标签: javascript

    (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,我在那里找到了这样的模块模式。 但是我发现它有点令人困惑,所以你能解释一下为什么我们需要把它放在我们的函数之后 - &gt;()。据我所知,这是让它自我调用。 但为什么我们需要让它自我调用?

第二个问题为什么我们需要将我们的函数放在括号(function)()中.Is ii just syntaxis?

1 个答案:

答案 0 :(得分:3)

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

例如:

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

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

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

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

在上面,将记录“foo”。如果没有括号,您将收到语法错误。

修改

值得注意的是,您可以使用(并偶尔会看到)!function代替(function)来使该函数成为表达式:

!function () {}();

相同
(function () {})();

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