Как мне объявить переменную, которая будет иметь значение setInterval? - PullRequest
0 голосов
/ 23 октября 2019

Я смотрел на вопрос, и кто-то ответил на него с кодом ниже, и в комментариях кто-то сказал

Я думаю, что вместо назначения undefined мы должны присвоить 0 для this.tm,Поскольку это временной интервал, и он не должен быть undefined.

constructor(props) {
    super(props);       

    this.tm; // With what value should this be declared?
}

timerInterval = () => {        
    this.tm = setInterval(() => {
            ...
    }, 1000);
}

render(){
    return(...)
}

Так что это заставило меня задуматься, какое значение должно быть объявлено? Изменение с undefined на 0 имеет какое-либо значение?

Ссылка из документации или что-то подобное было бы хорошо объяснить. Я не смог найти ни одного.

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Итак, объединяя все комментарии

  • Мне не нужно объявлять это в конструкторе, я могу просто использовать this.tm как обычно. Если я заявляю об этом, это будет хорошей практикой, чтобы сделать код более понятным.
  • Этот ответ содержит правильное объяснение, почему лучше установить его на 0, но тольков браузере. Если это окружение узла, лучше установить его на нуль.

    В браузерах дескриптор гарантированно будет числом, не равным 0;следовательно, 0 создает удобное значение флага для «таймер не установлен». (Другие платформы могут возвращать другие значения; функции таймера NodeJS, например, возвращают объект.)

1 голос
/ 23 октября 2019

Единственная причина сохранить intervalID - очистить интервал. clearInterval(intervalID) (а также clearTimeout(intervalID)) очистит интервал или тайм-аут, установленный с идентификатором intervalID, но ничего не сделает, если null, undefined или что-либо еще (например,как неверный или более неактивный идентификатор) передается им.

Таким образом, вы можете либо инициализировать переменную с помощью null, либо вообще не инициализировать ее.

...