Чтобы заставить изображение вращаться, наведя указатель мыши, я написал вот так.
В JavaScript
var images=["img1.png", "img2.png", "img3.png"];
var i = 0;
var timer = null;
window.onload = function() {
$("startButton").observe("mouseover", startSpin);
}
function startSpin() {
timer = setInterval(changeImage, 100);
}
function changeImage() {
i++;
if (i > 2) {
i = 0;
}
$("img").src = images[i];
}
Зачем мне "var timer = null;" как глобальная переменная? Не понимаю, почему код без этого не работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Давайте посмотрим, как бы это выглядело без этой строки:
var images=["img1.png", "img2.png", "img3.png"];
var i = 0;
window.onload = function() {
$("startButton").observe("mouseover", startSpin);
}
function startSpin() {
timer = setInterval(changeImage, 100);
}
function changeImage() {
i++;
if (i > 2) {
i = 0;
}
$("img").src = images[i];
}
Без начального var timer = null;timer впервые упоминается в функции startSpin. Там он понятия не имеет, что такое timer, потому что он никогда не определялся. Вам понадобится функция startSpin, чтобы она выглядела так:
function startSpin() {
let timer = setInterval(changeImage, 100);
}
В этом случае исходный var timer = null; вам не понадобится.
Технически, вы этого не сделаете,
var timerбудет работать так же хорошо, как и полностью исключить его (при условии, что вы уже находитесь на верхнем уровне, вы будете неявно назначать глобальную область видимости ... не очень хорошая идея, но это работает) Вы также можете удалить любые ссылки наtimer, если хотите, так как не похоже, что переменная фактически где-то используется