Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Флейм
  • » javascript, правильно ли что так работает область видимости? [RSS Feed]

#1 Июнь 19, 2012 13:33:05

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

пример в 6 строк:
http://jsfiddle.net/ntmP6/

строка console.log('2', XXX);, выводит пусто, хотя “по правилам” должна видимую ХХХ выдать.

Офлайн

#2 Июнь 19, 2012 13:33:18

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

Офлайн

#3 Июнь 19, 2012 14:18:49

flip89
От:
Зарегистрирован: 2011-10-21
Сообщения: 28
Репутация: +  2  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

Скрипт отрабатывает верно. У вас локальная переменная определяется во ВСЕМ теле функции и глобальная переменная также скрыта во всем теле функции, то есть во время вызова console.log() в функции вызывается локальная переменная XXX, она к этому моменту уже существует, но еще не инициализирована. Подробнее можно прочитать на страницах 70-71 книги с носорогом.



Отредактировано flip89 (Июнь 19, 2012 14:20:35)

Офлайн

#4 Июнь 19, 2012 15:14:03

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

o7412369815963
Второй var уберите,- это переопределение переменной XXX.
http://jsfiddle.net/r89Eg/



Офлайн

#5 Июнь 20, 2012 06:26:49

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

Я знаю как оно работает, я не правильно задал вопрос:
> локальная переменная определяется во ВСЕМ теле функции
почему сделали так? в чем смысл?

Ведь js как бы отрабатывает построчно (кстати python так же), т.е. первые строки кода влияют на последующие, но не наоборот.
А “оператором” var можно “убить” 100% рабочую фи-ю поставив его в самом конце. Логично было-б использовать переменную верхнего уровня, она же доступна, а при “var” создавать новую в текущей области видимости.

Офлайн

#6 Июнь 20, 2012 09:39:08

flip89
От:
Зарегистрирован: 2011-10-21
Сообщения: 28
Репутация: +  2  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

Так происходит потому, что определение функции происходит не во время выполнения, а во время синтаксического анализа. Зачем сделали именно так сказать не могу.



Офлайн

#7 Июнь 20, 2012 12:00:38

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

javascript, правильно ли что так работает область видимости?

Интерпретатор JavaScript перемещает объявления переменных в начало области видимости перед выполнением и создает их при входе в область видимости.
В данном случае область видимости как раз и есть функция.

ЗЫ
Это вы еще с порядком разрешения имен переменных в функциях и имен самих функций не сталкивались. Там еще больше все запутанно ;)



Отредактировано Lexander (Июнь 20, 2012 12:03:35)

Офлайн

  • Начало
  • » Флейм
  • » javascript, правильно ли что так работает область видимости?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version