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

Syntax of variable declaration? var a = (function() { })()

本问题已经有最佳答案,请猛点这里访问。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 =()() ..


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

可能会创建一个正常的函数,如下所示:

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

你可以随后称之为:

1
f1();

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

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


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