点击计数器(通过闭包)不会增加

时间:2015-02-16 18:29:43

标签: javascript closures

由于某些原因,我的代码无法跟踪我正在递增的局部变量,并且它总是返回其初始值0。

这是JSFiddle,我玩http://jsfiddle.net/ou2uxwn5/20/

var counter = function(){
var i = 0;
console.log(i);
return function(){
    i++;
    return i;
   };
};

不确定垃圾收集器是否会将其占用,尽管行为也与定义的var调用相同(我希望这会创建引用而不是将局部变量i抛入垃圾箱)。

代码有什么问题?为什么?

2 个答案:

答案 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语句中。