3

したがって、Javascript には関数の静的変数がないようです。関数内で変数をインクリメントしようとしていますが、次のようにしたくありません。

function countMyself() {
    if ( typeof countMyself.counter == 'undefined' ) {
        // It has not... perform the initilization
        countMyself.counter = 0;
    }
}

クロージャーでやりたいのですが、これらを理解するのに本当に苦労しています。

誰かが別の質問でこれを提案しました:

var uniqueID = (function() {
   var id = 0;
   return function() { return id++; };
})();

しかし、uniqueID を警告したときに行うことは、次の行を出力することだけです。};

したがって、グローバル スコープを汚染することなく、関数内の変数をインクリメントする方法を知りたいと思います。

4

3 に答える 3

5

実際に呼び出す uniqueID必要があります-変​​数であるかのように単に参照することはできません:

> uniqueID
function () { return id++; }

> uniqueID()
0

> uniqueID()
1
于 2013-10-05T02:33:22.583 に答える
1

すぐに呼び出されたラムダから返すのではなく、明示的に uniqueID に割り当てると、物事がより明確になる場合があります。

var uniqueId; //declare uniqueId in the outer scope

function initializeUniqueId(){
    var id=0;
    uniqueId = function(){
        return id++;
    }
}

initializeUniqueId();

console.log( uniqueId ); //what you are currently doing
console.log( uniqueId() }; //what you should be doing.

私が書いたものと比較したバージョンの利点は(function(){}())、初期化関数が匿名であり、「uniqueId」を一度だけ記述する必要があることです。

于 2013-10-05T02:43:11.557 に答える
0

「_a」変数をインクリメントしたいこのコードを簡単に参照してください

ES6

let a = () => {
  let _a = 1;
  return () => _a++;
}

let clo = a();
for (var i = 0; i < 5; i++) {
  console.log(clo());
}

ES5

var a = function() {
  var _a = 1;
  return function() {
    return _a++;
  }
}

var clo = a();
for (var i = 0; i < 5; i++) {
  console.log(clo());
}
于 2016-10-13T11:27:29.773 に答える