Показать сообщение отдельно
  #1 (permalink)  
Старый 13.11.2013, 07:27
Новичок на форуме
Отправить личное сообщение для Bombus Посмотреть профиль Найти все сообщения от Bombus
 
Регистрация: 13.11.2013
Сообщений: 6

Контекст функции при вызове по таймеру
Здравствуйте. При изучении учебника по 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?
Ответить с цитированием