Показать сообщение отдельно
  #3 (permalink)  
Старый 05.07.2016, 07:33
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

Еще раз напишу другими словами то, что написал Меч.

Ключевая штука которую Вы тут не понимаете называется hoisting.
Это то, что когда вы пишете var a; это объявление распространяется на всю текущую область видимости. То есть в данном случае где бы Вы его не написали это эквивалентно написанию в начале функции. Именно поэтому значение a не вытягивается из замыкания: переменная a уже есть в локальном скоупе, поэтому берется оттуда. Присваивание не всплывает, только объявление. Поэтому a на момент обращения равно undefined.
Ответить с цитированием