Мои задачи по Javascript
Случайная задача
Список всех задач

Задача 11

let x;
for (let i = 0; i < 10; i++) {
  x = i;
  setTimeout(console.log, 100, x);
  setTimeout(function() { console.log(x); }, 200);
  setTimeout(function() { console.log(i); }, 300);
}
Что будет выведено в консоли?
1
2
3
4
5
6
7
8
9
← Задача 10Задача 12 →
Пояснение В первом случае происходит запуск setTimeout с третьим и последующими параметрами (т.е. с передачей параметров в callback-функцию). Метод setTimeout "фиксирует" значения этих параметров в момент установки таймера.

Во втором случае по таймеру запускаются десять анонимных функций. Хотя директива let в цикле for создаёт новое лексическое окружение (scope), анонимные функции используют глобальную переменную x, которая была объявлена до цикла и которая стала 9 после завершения всех итераций цикла.

В третьем случае каждая из десяти анонимных функций взяли значение для i из своего собственного scope, которое создалось при каждой итерации цикла.



Написать сообщение - отзыв, пожелание и т.п.