-
Notifications
You must be signed in to change notification settings - Fork 923
Closed as not planned
Description
Глава Планирование: setTimeout и setInterval. https://learn.javascript.ru/settimeout-setinterval
из лекции:
+++++++
Продемонстрируем в примере ниже, что это означает. Вызов setTimeout повторно вызывает себя через 0 мс. Каждый вызов запоминает реальное время от предыдущего вызова в массиве times. Какова реальная задержка? Посмотрим:
let start = Date.now();
let times = [];
setTimeout(function run() {
times.push(Date.now() - start); // запоминаем задержку от предыдущего вызова (***)
if (start + 100 < Date.now()) alert(times); // показываем задержку через 100 мс
else setTimeout(run); // если нужно ещё запланировать
});
// пример вывода:
// 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100
++++++++
по-моему в строке (***) мы запоминаем задержку не от предыдущего вызова, а от самого первого вызова, переменная start у нас со временем никак не изменяется, и с каждым рекурсивным вызовом setTimeOut мы считаем прошедшее время от первоначальной точки
Если бы хотели показать задержку между каждым вызовом сеттаймаута, код был бы похож на этот:
let start = Date.now();
let times = [];
let last = Date.now();
setTimeout(function run() {
times.push(Date.now() - last); // запоминаем задержку от предыдущего вызова
if (start + 100 < Date.now()) alert(times); // показываем задержку через 100 мс
else {
last = Date.now();
setTimeout(run); // если нужно ещё запланировать
}
});
// вывод : [1, 1, 2, 1, 5, 4, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 6, 5, 5]
// здесь видим задержки между каждым вызовом, первые четыре вызова действительно с задержками <4ms
Поправьте где неправ
SineYlo
Metadata
Metadata
Assignees
Labels
No labels