0

これが私の自己実行関数です:

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

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

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

変数incIntとmanyOutを民営化し、変数incrementIntを返されたオブジェクトに関連付けました。

私の目標は、1つのプロパティが呼び出されるたびにインクリメントする整数であるオブジェクトを返す関数を作成することです。インクリメント変数のスコープを可能な限り狭くしたいと思います。

上記の解決策に関する私の問題は、関数が呼び出されるたびに変数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 に答える