未知的JavaScript语法可能与闭包有关

时间:2011-04-10 00:18:31

标签: javascript

我发现了一些我不知道的JavaScript语法,我甚至不知道它是如何被调用的,或者是什么,所以我找不到任何文档。

我在MDC Doc Center上找到了它:

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }   
})();

我感兴趣的部分是:

var Counter = (function() {})();

圆括号有什么作用?如何调用它以及可以在何处使用它?

3 个答案:

答案 0 :(得分:1)

(function() {})()是一个立即执行的函数。

这会在代码块周围创建私有范围。这也可以创建一个闭包,它可以在函数结束后保持状态。

()周围需要function() {},因为function() {}()是非法声明(JS解析器失败)。

另外,习惯是确保在()中包装一个立即执行的函数,以便代码的读者知道他们应该对函数的返回值而不是函数感兴趣。

答案 1 :(得分:0)

这是模块模式。它通常用于创建单身人士。看到这个答案:

What is this design pattern known as in JavaScript?

答案 2 :(得分:0)

考虑何时有一个名为a的函数:

function a() {
   alert("hi");
}

你这样称呼它:

a();

(function() {})()中,您只是跳过事先定义函数的部分。一下子,你已经定义了一个未命名的函数并调用它。