Здравствуйте. При изучении учебника по Javascript возник вопрос. В теме про таймеры есть упражнение
"Вывод чисел каждые 100мс". Код решения:
function printNumbersInterval20_100() {
var i = 1;
var timerId = setInterval(function() {
console.log(i);
if (i == 20) clearInterval(timerId);
i++;
}, 100);
}
// вызов
printNumbersInterval20_100();
Не понял расклад по контексту (видимости переменных) в случае вызова setInternal() из функции (не из глобального контекста), в нашем случае printNumbersInterval20_100. Из текста
статьи, цитирую: "Вызов через setTimeout не передаёт контекст this. В частности, вызов метода объекта через setTimeout сработает в глобальном контексте". Так вот если наша анонимная функция сработает через указанное время в глобальном контексте, то откуда она будет знать про переменную i, которая определена локально во внешней функции? Как я понимаю, setInternal не блокирует выполнение скрипта, в данном случае не останавливает выполнение функции printNumbersInterval20_100. Т.е.создав таймер "в отдельном потоке", функция продолжает выполнятся и в конце концов заканчивается. Тогда откуда берется сохраненное значение i?