Я получил этот код здесь:
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: