我有两个计数器实现(对我而言)似乎相同,这是我的代码:
var fakeCounter = function() {
var i = 0;
return function() {
return i++;
}
};
// And
var counter = (function() {
var i = 0;
return function() {
return i++;
}
}());
// And here the confusion:
console.log(fakeCounter()()); // 0
console.log(fakeCounter()()); // 0
console.log(fakeCounter()()); // 0
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2
因此,第一个计数器不起作用,而第二个计数器不起作用。而且我不知道为什么,因为在我的脑海中counter()
等于fakeCounter()()
。
有人可以澄清吗?
答案 0 :(得分:-1)
您同时是对还是对:fakeCounter()()
和counter()
相同,但仅在被调用一次时:
fakeCounter()
和var counter
的IIFE一样,创建一个带有闭包的函数。()
调用该函数。fakeCounter()
每次都会创建一个 new 函数,该函数会在其中捕获自己的var i
。var i
。我鼓励您尝试以下代码:
let a = fakeCounter(); // a is a counter
let b = fakeCounter(); // as is b
// ... but are they the same? Hmmmm...
console.log(a === b); // false -- Nope, they are separate functions
console.log(a()); // 0
console.log(a()); // 1
console.log(a()); // 2
console.log(b()); // 0
console.log(b()); // 1
console.log(b()); // 2
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2