0

这是我的自动执行功能:

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

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

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

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

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

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

4

3 回答 3

1

你可以像这样创建和对象

function incr () {
  var i = 0;

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

var incrInt = new incr();

// somewhere in you code
incrInt.inc();
于 2012-09-17T00:33:10.807 回答
1
var f = function() { var c=0; return function() { return c++; }} ()
> f()
0
> f()
1
> f()
2

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

于 2012-09-17T00:34:27.317 回答
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​​​​​​
于 2012-09-17T00:38:09.020 回答