«Переменная времени ожидания» - это просто число, идентификатор времени ожидания. Переназначение переменной, которой назначен номер, само по себе не является проблемой, но если вы хотите очистить тайм-аут, вам придется передать тот же ID тайм-аута в clearTimeout
. Просто для иллюстрации, а не то, что вы должны делать это в реальном коде, вы можете вызвать setTimeout
в начале загрузки страницы и получить идентификатор тайм-аута 1, затем вызвать clearTimeout
с 1
, и тайм-аут будет очищен:
x = window.setTimeout(() => {
alert("hello")
});
window.clearTimeout(1);
Сама переменная не является чем-то особенным, это просто значение , число, которое вам нужно отслеживать, чтобы вы могли передать его clearTimeout
.
Во втором фрагменте, поскольку вы присваиваете undefined
на x
до выполнения clearTimeout(x)
, интерпретатор не знает о текущем таймауте с идентификатором undefined
, поэтому он ничего не очищает.
Вы также можете присвоить идентификационный номер тайм-аута переменной другой и очистить исходную переменную:
var x = null;
function a() {
x = window.setTimeout(() => {
alert("hello")
})
}
a();
function b() {
const savedX = x;
x = undefined;
window.clearTimeout(savedX);
alert("bye")
}
b();