由于某些原因,我的代码无法跟踪我正在递增的局部变量,并且它总是返回其初始值0。
这是JSFiddle,我玩http://jsfiddle.net/ou2uxwn5/20/
var counter = function(){
var i = 0;
console.log(i);
return function(){
i++;
return i;
};
};
不确定垃圾收集器是否会将其占用,尽管行为也与定义的var调用相同(我希望这会创建引用而不是将局部变量i抛入垃圾箱)。
代码有什么问题?为什么?
答案 0 :(得分:1)
你应该立即执行第一个功能,以避免任何混乱。这将返回一个新功能并将其分配给计数器。
var counter = (function(){
var i = 0;
console.log(i);
return function(){
i++;
return i;
};
})(); // logs 0 in the console
调用 counter()会增加 i 并返回其值。
console.log(counter()); // logs 1 in the console
console.log(counter()); // logs 2 in the console
我建议您阅读有关闭包的内容,以便更好地了解它们的工作原理。这是good place to start。
答案 1 :(得分:0)
问题解决了:
1)应该拨打"来电()"而不是" counter()" 2)将console.log(i)移动到return语句中。