Найти - Пользователи
Полная версия: javascript, правильно ли что так работает область видимости?
Начало » Флейм » javascript, правильно ли что так работает область видимости?
1
o7412369815963
пример в 6 строк:
http://jsfiddle.net/ntmP6/

строка console.log('2', XXX);, выводит пусто, хотя “по правилам” должна видимую ХХХ выдать.
o7412369815963
проверял в chrome и firefox
flip89
Скрипт отрабатывает верно. У вас локальная переменная определяется во ВСЕМ теле функции и глобальная переменная также скрыта во всем теле функции, то есть во время вызова console.log() в функции вызывается локальная переменная XXX, она к этому моменту уже существует, но еще не инициализирована. Подробнее можно прочитать на страницах 70-71 книги с носорогом.
Lexander
o7412369815963
Второй var уберите,- это переопределение переменной XXX.
http://jsfiddle.net/r89Eg/
o7412369815963
Я знаю как оно работает, я не правильно задал вопрос:
> локальная переменная определяется во ВСЕМ теле функции
почему сделали так? в чем смысл?

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

ЗЫ
Это вы еще с порядком разрешения имен переменных в функциях и имен самих функций не сталкивались. Там еще больше все запутанно ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB