Нужна функция, меняющая задний фон div каждые 500 мс. Требуется устранение ошибки

У меня что-то не так. Функция color() должна вызывать саму себя каждые 500 мс и менять задний фон тега div с классом .text

Код:

const text = document.querySelector('.text');

text.style.background = 'red';
text.style.width = '200px';
text.style.height = '200px';

function color () {
    const text = document.querySelector('.text');
    if (text.style.background == 'blue') {
        text.style.background = 'red';
    } else if (text.style.background == 'red') {
        text.style.background = 'green';
    } else {
        text.style.background = 'blue';
    }
    setInterval(() => {
        color();
    }, 500);
}
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="text"></div>
    <script src="script.js"></script>
</body>
</html>


Ответы (1 шт):

Автор решения: Федор Досумов

В вашем текущем коде нужно вместо

setInterval

написать

setTimeout

Всё потому что setInterval вызывается бесконечно и будет бесконечно запускать функцию каждые 500 мс. При каждом новом вызове будет происходить запуск всё нового и нового счётчика setInterval, в итоге их будет огромное количество и будет происходить наслаиваение друг на друга всё большего количества бесконечных setInterval. А setTimeout отрабатывает только один раз. Таймаут вызывал функцию и "умер". В следующий вызов функции будет вызов нового таймаута, который отработает тоже один раз и тоже после срабатываения "умрёт"

Ну и не забыть самый первый вызов color() тоже надо

→ Ссылка