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

Jin*_*iel 1 javascript syntax class object

可能重复:
围绕JavaScript对象/函数/类声明的括号是什么意思?

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

var testModule = (function(){

    var counter = 0;

    return {

       incrementCounter: function() {

            return counter++;

        },

        resetCounter: function() {

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

            counter = 0;

        }

    };

})();
Run Code Online (Sandbox Code Playgroud)

所以它遵循语法 var a = (blah balh..)()

它究竟意味着什么?变量声明的含义是什么a =()()...

rya*_*hue 5

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

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

var f1 = function() {
  console.log('bar');
};
Run Code Online (Sandbox Code Playgroud)

你可以随后称之为:

f1();
Run Code Online (Sandbox Code Playgroud)

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

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