变量声明的语法? var a =(function(){})()

时间:2012-01-23 04:07:18

标签: javascript class object syntax

  

可能重复:
  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 =()() ..

2 个答案:

答案 0 :(得分:5)

它定义了一次性使用功能并立即执行。您提供的代码名为Module Pattern - 有关其属性的更多信息,请参阅此处:http://www.yuiblog.com/blog/2007/06/12/module-pattern/

可能会创建一个正常的函数:

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

你随后可以这样称呼它:

f1();

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

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

答案 1 :(得分:2)

执行匿名函数,并将返回值分配给变量。