0

我想知道为什么这段代码不起作用,

var uniqueInteger = function() {
    var counter = 0;
    return function() { return counter++; }
};

console.log(uniqueInteger()());  // 0
console.log(uniqueInteger()());  // 0
console.log(uniqueInteger()());  // 0 
console.log(uniqueInteger()());  // 0

这段代码可以。唯一的区别是使函数自调用而不是在 console.log() 中调用它

var uniqueInteger = (function() {
    var counter = 0;
    return function() { return counter++; }
}());

console.log(uniqueInteger());  // 0
console.log(uniqueInteger());  // 1
console.log(uniqueInteger());  // 2 
console.log(uniqueInteger());  // 3

我对JS很陌生,所以请原谅我的菜鸟。谢谢!

4

1 回答 1

0

第二个代码var counter = 0只创建了一个闭包,因为在定义 uniqueInteger 时,它调用了一个函数,该函数返回一个完成初始化的函数。var counter = 0每次调用时都会创建第一个代码。

请注意,使用第一个代码,您可以执行以下操作:

ui = uniqueInteger();
console.log(ui()); // 0
console.log(ui()); // 1
ui2 = uniqueInteger();
console.log(ui()); // 2
console.log(ui2()); // 0
console.log(ui()); // 3
console.log(ui2()); // 1
于 2013-07-28T16:16:08.350 回答