可以说我们已经在全局范围内定义了这个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
终于得到功能了吗?
从本质上讲,
counter1
和createCounter
都不是全局范围内存在的那个内部函数的指针吗?也许这是一个更好的方法,为什么
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