[英]How to keep persistent data in a function?
我有一个函数,它接收一个从 1 到 999 的数字。我想知道这个数字自上次调用该函数以来是否发生了变化。
例如,如果我按这个顺序调用它,它的预期行为将是:
我写了以下闭包函数:
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
时,都会创建一个新的闭包和一个新的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.