Jaki jest powód, dla którego JavaScript setTimeout jest tak niedokładny?

Mam tutaj ten kod:

var date = new Date();
setTimeout(function(e) {
    var currentDate = new Date();
    if(currentDate - date >= 1000) {
         console.log(currentDate, date);
         console.log(currentDate-date);
    }
    else {
       console.log("It was less than a second!");
       console.log(currentDate-date);
    }
}, 1000);

W moim komputerze zawsze działa poprawnie, z 1000 na wyjściu konsoli. Zainteresowanie innym komputerem, tym samym kodem, wywołanie zwrotne limitu czasu rozpoczyna się w mniej niż sekundę, a różnica wynosicurrentDate - date jest między 980 a 998.

Wiem, że istnieją biblioteki, które rozwiązują tę niedokładność (na przykładTock).

Zasadniczo moje pytanie brzmi:Jakie są przyczyny, ponieważsetTimeout nie strzela w danym czasie? Czy może to być komputer zbyt wolny, a przeglądarka automatycznie próbuje dostosować się do powolności i wcześniej strzela?

PS: Oto zrzut ekranu kodu i wyników wykonanych w konsoli JavaScript JavaScript:

questionAnswers(3)

yourAnswerToTheQuestion