使用闭包和自调用函数制作计数器

Making counter using closure and self-invoking function

本文关键字:函数 数制 计数器 调用 闭包      更新时间:2023-09-26

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

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的新手,所以请原谅我的无知。谢谢

第二个代码只使用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