我想知道为什么这段代码不起作用,
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。谢谢!
答案 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