以前的状态保存功能

Sas*_*Kos 0 javascript

我有一个代码

var variable = 0;

function add() {
  return variable += 1;
}

console.log(add());
console.log(add());
Run Code Online (Sandbox Code Playgroud)

我想知道有没有办法只使用函数和范围编写这段代码,就像

function add() {
  /* SET INITIAL STATE IF NOT SET*/
  /* EXECUTE */
  /* RETURN NEW VAL */
}

add(); /* RETURN 1*/
add(); /* RETURN 2*/
Run Code Online (Sandbox Code Playgroud)

得到相同的结果.

谢谢.

T.J*_*der 5

......只使用一个功能......

您的代码不会只用一个函数(add).如果您的意思是不希望它关闭variable,您可以将计数存储在其他位置,例如作为函数本身的属性:

function add() {
  if (!add.variable) {
    add.variable = 0;
  }
  return ++add.variable;
}

console.log(add());
console.log(add());
console.log(add());
Run Code Online (Sandbox Code Playgroud)

但是,当然,这意味着任何代码都可以访问和更改它.

通常的做法是关闭变量,也许将其隐藏在其他任何东西都看不到的范围内:

var add = (function() {
  var variable = 0;
  return function add() {
    return ++variable;
  };
})();

console.log(add());
console.log(add());
console.log(add());
Run Code Online (Sandbox Code Playgroud)