繁体   English   中英

如何在函数中保留持久数据?

[英]How to keep persistent data in a function?

我有一个函数,它接收一个从 1 到 999 的数字。我想知道这个数字自上次调用该函数以来是否发生了变化。

例如,如果我按这个顺序调用它,它的预期行为将是:

  • hasUpdated(1) // 输出假
  • hasUpdated (2) // 输出真
  • hasUpdated(1) // 输出真(因为我之前切换到了2,所以数字已经更新了)。

我写了以下闭包函数:

 const hasUpdated = (data) => { let updated = false; function checkIfUpdated (data){ if(updated){ return true } if(!updated && data > 1){ updated= true return true } if (!updated && data === 1) { return false } } checkIfUpdated(data) }

它的结果是:

  • hasUpdated(1) // 输出假
  • hasUpdated (2) // 输出真
  • hasUpdated(1) // 输出假

所以它没有正确保存值。 如何解决?

每次调用hasUpdated时,都会创建一个新的闭包和一个新的updated变量。 保持持久变量所需要做的就是只创建一次闭包。 此外,您还需要保留上次调用的data进行比较,而不仅仅是updated标志。

function makeUpdateTest(initialValue) {
  let oldData = initialValue;
  return (newData) => {
    const updated = newData !== oldData;
    oldData = newData;
    return updated;
  };
}

const hasUpdated = makeUpdateTest(1);
console.log(hasUpdated(1)) // false
console.log(hasUpdated(2)) // true
console.log(hasUpdated(2)) // false
console.log(hasUpdated(1)) // true

hasUpdated2 = makeUpdateTest()将保持一个单独的状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM