В чем причина того, что JavaScript setTimeout такой неточный?

Я получил этот код здесь:

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);

В моем компьютере это всегда выполняется правильно, с 1000 на выходе консоли. Заинтересован в другом компьютере, тот же код, время ожидания обратного вызова начинается менее чем за секунду, и разницаcurrentDate - date между 980 и 998.

Я знаю существование библиотек, которые решают эту неточность (например,Tock).

В основном мой вопрос:Каковы причины, потому чтоsetTimeout не срабатывает в заданную задержку? Может ли это быть компьютер, который работает слишком медленно, и браузер автоматически пытается адаптироваться к медленности и запускает событие раньше?

PS: Вот скриншот кода и результатов, выполненных в консоли Chrome JavaScript:

Ответы на вопрос(3)

Ваш ответ на вопрос