Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2013, 17:53
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

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


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

Спасибо за внимание.
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2013, 17:54
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Также если у кого есть ссылки на интересные вещи о javascript, если не жалко - киньте почитать
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2013, 18:14
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от tsigel
var a = 1;
(function () {
  a = 3; //казалось бы мы заменили а = 1 на а = 3, но это не так
  alert(a)
  var a = 2;
})()
alert(a);//1
var a добавил переменную в текущий (внутренний) scope. Причем это произошло до строки a = 3;
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2013, 18:16
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

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


эквивалентен
(function () {
  var a;
  a = 3;
  alert(a)
  a = 2;
})()
Ответить с цитированием
  #5 (permalink)  
Старый 06.09.2013, 18:19
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Яростный Меч,
Интересно, никогда не пробовал писать присвоение значения до объявления переменной.
Ответить с цитированием
  #6 (permalink)  
Старый 06.09.2013, 18:26
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

tsigel,

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение глобальной переменной из функции SunYang Общие вопросы Javascript 1 06.11.2012 00:03
userjs переопределение текста функции qnx Opera, Safari и др. 2 16.10.2012 14:23
Значение переменной за пределами функции Skyman jQuery 5 05.05.2012 09:15
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
изменение переменной в функции ananax Общие вопросы Javascript 19 12.01.2011 12:09