Javascript 如何使用递增函数避免全局变量?

Javascript 如何使用递增函数避免全局变量?,javascript,Javascript,以下是我的自动执行功能: var incrementInt = (function() { var manyOut = 10; if(incInt) { incInt+=manyOut; } else { var incInt = 0; } return { s: incInt, m: manyOut }; })(); 我已经私有化了incInt和manyOut变量,并将incr

以下是我的自动执行功能:

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

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

    return {
        s: incInt,
        m: manyOut
    };
})();
我已经私有化了incInt和manyOut变量,并将incrementInt变量绑定到返回的对象

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


上述解决方案的问题在于每次调用函数时都会重新初始化变量incInt。由于变量在函数中的作用域,它会自动销毁。

您可以创建这样的对象

function incr () {
  var i = 0;

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

var incrInt = new incr();

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

您可以创建这样的对象

function incr () {
  var i = 0;

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

var incrInt = new incr();

// somewhere in you code
incrInt.inc();
基本上,利用Javascript使用函数创建作用域和闭包以捕获局部变量的能力


基本上,利用Javascript使用函数创建作用域和闭包来捕获局部变量的能力。

您需要使用方法来添加和获取变量
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​​​​​​

您需要使用方法来添加和获取变量
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​​​​​​

每次什么时候叫什么?哦!这是一个很好的观点。只叫一次!每次什么时候叫什么?哦!这是一个很好的观点。只叫一次!非常好,其他解决方案看起来很有希望,但感谢您回答返回对象的完整问题,注意到我希望增量是可变的非常好,其他解决方案看起来很有希望,但感谢您回答返回对象的完整问题,注意到我希望增量是一个变量