o7412369815963
Июнь 19, 2012 13:33:05
пример в 6 строк:
http://jsfiddle.net/ntmP6/строка console.log('2', XXX);, выводит пусто, хотя “по правилам” должна видимую ХХХ выдать.
o7412369815963
Июнь 19, 2012 13:33:18
проверял в chrome и firefox
flip89
Июнь 19, 2012 14:18:49
Скрипт отрабатывает верно. У вас локальная переменная определяется во ВСЕМ теле функции и глобальная переменная также скрыта во всем теле функции, то есть во время вызова console.log() в функции вызывается локальная переменная XXX, она к этому моменту уже существует, но еще не инициализирована. Подробнее можно прочитать на страницах 70-71 книги с носорогом.
Lexander
Июнь 19, 2012 15:14:03
o7412369815963Второй var уберите,- это переопределение переменной XXX.
http://jsfiddle.net/r89Eg/
o7412369815963
Июнь 20, 2012 06:26:49
Я знаю как оно работает, я не правильно задал вопрос:
> локальная переменная определяется во ВСЕМ теле функции
почему сделали так? в чем смысл?
Ведь js как бы отрабатывает построчно (кстати python так же), т.е. первые строки кода влияют на последующие, но не наоборот.
А “оператором” var можно “убить” 100% рабочую фи-ю поставив его в самом конце. Логично было-б использовать переменную верхнего уровня, она же доступна, а при “var” создавать новую в текущей области видимости.
flip89
Июнь 20, 2012 09:39:08
Так происходит потому, что определение функции происходит не во время выполнения, а во время синтаксического анализа. Зачем сделали именно так сказать не могу.
Lexander
Июнь 20, 2012 12:00:38
Интерпретатор JavaScript перемещает объявления переменных в начало области видимости перед выполнением и создает их при входе в область видимости.
В данном случае область видимости как раз и есть функция.
ЗЫ
Это вы еще с порядком разрешения имен переменных в функциях и имен самих функций не сталкивались. Там еще больше все запутанно ;)