可以说我们已经在全局范围内定义了这个function:

function createCounter() {
  var counter = 0;

  function increment() {
    counter = counter + 1;

    console.log("Number of events: " + counter);
  }

  return increment;
}

在大多数解释闭包的示例中,我看到执行:
createCounter();

从全局范围将只是返回内部函数:
function increment() {
    counter = counter + 1;

    console.log("Number of events: " + counter);
}

现在就完全有意义了,因为createCounter函数声明中的这一行
return increment;

所以我的问题是,为什么这样做:
var counter1 = createCounter();

counter1();

Number of events: 1 //result

终于得到功能了吗?

从本质上讲,counter1createCounter都不是全局范围内存在的那个内部函数的指针吗?

也许这是一个更好的方法,为什么counter1()可以工作,而不是像createCounter那样返回内部函数呢?

最佳答案

不,createCounter是一个函数,它返回increment函数的单独实例,该实例持有一个具有不同本地counter变量的新闭包。

因此,是的,您需要额外的调用以获取函数的单独实例,并根据需要多次调用该实例。请注意,调用createCounter不会增加计数器,但是调用counter1或counter2确实会增加计数器。

var counter1 = createCounter(); //local counter is still 0
var counter2 = createCounter();
counter1(); // 1
counter2(); // 1
counter1(); // 2
counter2(); // 2

09-11 18:29