Здравствуйте!
Вот пример хорошо знакомой области видимости функции:
var a = 1; 
(function () {
   alert(a)
})()
Недавно заметил такую штуку, что если в последующей функции мы переопределяем переменную, то исходная переменная нам не доступна не только после объявления такой же переменной но и до этого. 
Тоесть:
var a = 1;
(function () {
  a = 3; //казалось бы мы заменили а = 1 на а = 3, но это не так
  alert(a)
  var a = 2;
})()
alert(a);//1
Практически получив такой код интерпретатор воспринимает его так:
var a = 1;
(function () {
  var a;
  a = 3; 
  alert(a)
  a = 2;
})()
alert(a);//1
Я немного поискал, но нигде не нашёл информации по данному нюансу. 
Если кто знает где об, этом почитать, было бы любопытно посмотреть.
Спасибо за внимание.