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 时,它所做的只是打印这一行:return function() { return id++; };

所以我想知道如何在不污染全局范围的情况下增加函数中的变量。

4

3 回答 3

5

您必须实际调用 uniqueID- 您不能只引用 is 就好像它是一个变量:

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

> uniqueID()
0

> uniqueID()
1
于 2013-10-05T02:33:22.583 回答
1

显式分配给 uniqueID 而不是从立即调用的 lambda 中返回它可能会使事情更清楚:

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 回答