javascript - 模块模式或模块化

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

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

最佳答案

立即调用函数的要点有两个:首先,最明显的是,它们立即调用自身。其次,函数内定义的所有变量都封装在该函数内。

例如:

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

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

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

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

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

编辑

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

!function () {}();

与以下内容相同

(function () {})();

异常(exception)的是它将返回值转换为 bool 值,该值被取反,但在大多数情况下无论如何都会被忽略。

关于javascript - 模块模式或模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618425/

相关文章:

javascript - jQuery 拦截表单提交到参数字符串

javascript - 严格模式下获取当前函数名

javascript - 更少的客户端

javascript - 将实时数据传输到网页

javascript - 将字符串分成三 block ,但最少为两 block

javascript - 使用 javascript 为 CSS 创建一个新的单位类型?

javascript - node.js 服务器之间的通信

javascript - Firebase 权限

javascript - 使用 javascript 正则表达式列出 C++ 中函数的参数

javascript - mustache + 嵌套对象