如何通过递增函数来避免全局变量?

时间:2012-09-17 00:29:55

标签: javascript

这是我的自动执行功能:

var incrementInt = (function() {
    var manyOut = 10;

    if(incInt) {
        incInt+=manyOut;
    } else {
        var incInt = 0;
    }

    return {
        s: incInt,
        m: manyOut
    };
})();

我已将变量incInt和manyOut私有化,并将变量incrementInt绑定到返回的对象。

我的目标是创建一个返回一个对象的函数,其中一个属性是一个整数,每次调用它时都会递增。我希望递增变量具有尽可能窄的范围。

我上面的解决方案的问题是每次调用函数时都会重新初始化变量incInt。由于其在函数内的范围,变量会自动销毁。

3 个答案:

答案 0 :(得分:1)

您可以像这样创建和对象

function incr () {
  var i = 0;

  this.inc = function() {
    i++;
  }
}

var incrInt = new incr();

// somewhere in you code
incrInt.inc();

答案 1 :(得分:1)

var f = function() { var c=0; return function() { return c++; }} ()
> f()
0
> f()
1
> f()
2

基本上,利用Javascript能够使用函数创建范围和闭包来捕获局部变量。

答案 2 :(得分:1)

您需要使用方法来添加和获取变量incInt

var incrementInt = (function() {
    var manyOut = 10,
        incInt = 0;

    return {
        add: function() {
            return incInt += manyOut;
        },
        getInt: function() {
            return incInt;
        }
    };

})();


var a = incrementInt;


a.add();
a.add();

a.getInt(); // 20​​​​​​