Объяснение работы скрипта

С помощью этого кода создается индикатор загрузки. Кто-нибудь может объяснить порядок JS-кода в функции race? Почему setTimeout стоит именно там, а не в другом месте? И еще, можете посоветовать статьи, книги, видео, объясняющие порядок работы кода в теле функции? Мне хочется писать осмысленный код, где я понимаю каждую строчку кода.

<!DOCTYPE html>
<html lang="en">
<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>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="loa"></div>
    <script src="script.js"></script>
</body>
</html>

div {
    text-align: center;
    margin-top: 100px;
}

.tim {
    width: 15px;
    height: 10px;
    background: #0000cc;
    display: inline-block;
    margin: 1px;
}
addEventListener('load', race);

let i = 0;
let d = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

function race() {
    let t = '';
    
    for (let a = 0; a <= d[i]; a++) {
        t+= "<div class='tim'></div>";
    }

    document.getElementById('loa').innerHTML = t;
    i++;
    
    if (i == d.length) {
      i = 0;
    }
    setTimeout(race, 1000);
}


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

Автор решения: Алексей Шиманский

Почему setTimeout стоит именно там, а не в другом месте?

Потому что надо сделать все вычисления, всё перевысчитать, перерисовать и только потом заново вызвать эту функцию. Было бы странно перевызывать эту функцию до каких-либо вычислений и перерисовок

Банально таймаут может сработать раньше, чем произойдут все вычисления и перерисовка, так как может браузер слабый, железка хилая, факторов, которые притормозят - много. Поэтому даже в игровых движках (например Unity3d) есть специальная функция и свойство Time.deltaTime, которая возвращает 'мс' с последнего фрейма, чтобы это значение вставить в вычисления для компенсации, чтобы у всех пользователей работало одинаково на любых железках. Поэтому угадать с таймаутом заранее просто невозможно.

→ Ссылка