使用闭包和自动调用功能来制作计数器

时间:2013-07-28 16:12:17

标签: javascript closures self-invoking-function

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

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很新,所以请原谅我的noobness。谢谢!

1 个答案:

答案 0 :(得分: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