Как сохранить постоянные данные в функции? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть функция, которая получает число от 1 до 999. Я хочу знать, изменилось ли это число с момента последнего вызова функции.

Например, если я вызывал ее в таком порядке его ожидаемое поведение будет следующим:

  • hasUpdated (1) // output false
  • hasUpdated (2) // output true
  • hasUpdated (1) // выведите true (потому что раньше я переключился на 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) // output false
  • hasUpdated (2) // output true
  • hasUpdated (1) // output false

Таким образом, значение не сохраняется должным образом. Как это исправить?

1 Ответ

0 голосов
/ 01 апреля 2020

Вы создаете новое замыкание и новую переменную updated каждый раз, когда вызываете hasUpdated. Чтобы сохранить постоянную переменную, вам нужно создать замыкание только один раз. Также вам нужно будет сохранить 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

A hasUpdated2 = makeUpdateTest() будет сохранять отдельное состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...