Possible Duplicate:
What do parentheses surrounding a JavaScript object/function/class declaration mean?




我在网站上找到以下代码。

var testModule = (function(){

    var counter = 0;

    return {

       incrementCounter: function() {

            return counter++;

        },

        resetCounter: function() {

            console.log('counter value prior to reset:' + counter);

            counter = 0;

        }

    };

})();


因此它遵循语法var a = (blah balh..)()

这到底是什么意思?像a =()()这样的变量声明是什么意思。

最佳答案

它定义了一个一次性函数并立即执行。您提供的代码称为模块模式-有关其属性的更多信息,请参见此处:http://www.yuiblog.com/blog/2007/06/12/module-pattern/

可以这样创建普通函数:

var f1 = function() {
  console.log('bar');
};


然后您可以这样称呼它:

f1();


但是在您提供的示例中,该函数被定义和执行一次,并且该函数返回具有两个函数的对象:incrementCounterresetCounter。您可以这样称呼他们:testModule.incrementCounter()testModule.resetCounter()

当您只有一个对象并且想要封装一些仅对闭包中定义的函数可用的属性时,模块模式很有用。

10-06 12:34