Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переопределение переменной в функции (https://javascript.ru/forum/misc/41274-pereopredelenie-peremennojj-v-funkcii.html)

tsigel 06.09.2013 17:53

Переопределение переменной в функции
 
Здравствуйте!

Вот пример хорошо знакомой области видимости функции:
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


Я немного поискал, но нигде не нашёл информации по данному нюансу.
Если кто знает где об, этом почитать, было бы любопытно посмотреть.

Спасибо за внимание.

tsigel 06.09.2013 17:54

Также если у кого есть ссылки на интересные вещи о javascript, если не жалко - киньте почитать :)

Яростный Меч 06.09.2013 18:14

Цитата:

Сообщение от tsigel
var a = 1;
(function () {
  a = 3; //казалось бы мы заменили а = 1 на а = 3, но это не так
  alert(a)
  var a = 2;
})()
alert(a);//1

var a добавил переменную в текущий (внутренний) scope. Причем это произошло до строки a = 3;

Яростный Меч 06.09.2013 18:16

попросту говоря,
(function () {
  a = 3;
  alert(a)
  var a = 2;
})()


эквивалентен
(function () {
  var a;
  a = 3;
  alert(a)
  a = 2;
})()

tsigel 06.09.2013 18:19

Яростный Меч,
Интересно, никогда не пробовал писать присвоение значения до объявления переменной.

Яростный Меч 06.09.2013 18:26

tsigel,

этот момент подробно описан здесь.


Часовой пояс GMT +3, время: 19:39.