Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   тест (https://javascript.ru/forum/offtopic/1927-test.html)

ZoNT 07.10.2008 21:14

если б я знал, я бы не спрашивал :)

Dmitry A. Soshnikov 07.10.2008 22:22

Цитата:

Сообщение от Kolyaj
Имелось в виду variable definition.

function-expression

Цитата:

Сообщение от Андрей Параничев
Именованная функция видна везде, анонимная - только после объявления.

не только анонимная, а function-expression. Вообще, function-expression не воздействует на variable object, однако в случае последующей привязки к var'у она все же доступна для вызова

Цитата:

Сообщение от ZoNT
какие это контексты???

каждый вызов функции (а также ее вызов в роли конструктора) создает новый контекст запуска; типы исполняемого кода: глобальный, eval, и тело функции (10.2 Entering An Execution Context)

ZoNT 08.10.2008 11:19

Цитата:

Сообщение от Dmitry A. Soshnikov
Сообщение от ZoNT
какие это контексты???
каждый вызов функции (а также ее вызов в роли конструктора) создает новый контекст запуска; типы исполняемого кода: глобальный, eval, и тело функции (10.2 Entering An Execution Context)

Я спрашивал про контексты в хэде и в боди. Какие это контексты?

Dmitry A. Soshnikov 08.10.2008 12:16

Цитата:

Сообщение от ZoNT
Я спрашивал про контексты в хэде и в боди.

хэд и боди к JS никак не относятся.

Цитата:

Сообщение от ZoNT
Какие это контексты?

глобальный контекст, но когда войдет в функцию - будет контекст функции (если затем функция запустит сама себя рекурсивно - создастся новый контекст, где тип исполняемого кода - тоже "функция")

ZoNT 08.10.2008 12:42

Ты пример смотрел?

Dmitry A. Soshnikov 08.10.2008 13:32

я те про пример и объясняю =) если что-то не понятно - спрашивай

Zeroglif 08.10.2008 13:32

Цитата:

Сообщение от ZoNT (Сообщение 6842)
Я спрашивал про контексты в хэде и в боди. Какие это контексты?

Контексты исполнения глобального кода каждого отдельного скриптового блока (2 штуки).

ECMAScript не распыляет "ECMAScript program" на несколько, все термины крутятся вокруг одной, в единственном числе. Соответственно, стек контекстов исполнения формируется в рамках одного единственного "execution of an ECMAScript program", около-html-ные вопросы, связанные с несколькими скриптовыми блоками, кодом в атрибутах элементов и проч. не рассматриваются вообще. Отсюда можно самому выдумать теорию, например:

а) каждый блок - это execution of an ECMAScript program, со своим собственным стеком контекстов исполнения, по html-коду ползает html-парсер, и каждый найденный им скриптовый кусок - это отдельно взятая программа, работающая по алгоритмам ES;

б) определяющим является единый для блоков глобальный объект (это самое важное), контекст исполнения глобального кода един на все блоки, конретизация (hoisting кому ближе) "переменных" в каждом блоке хоть и своя, но это обычно незаметно глазу, т.к. мало кто создаёт себе ошибки на этом фронте (пример не в счёт).

в) иное определение ситуации...

ZoNT 08.10.2008 13:42

вот этот ответ - правильный.

Контекст у каждого скриптового блока свой. Это логично. Ведь нельзя обратится к функции из другого блока, если этот блок ещё не загружен/исполнен. А загружен он может быть только если его вызов был РАНЬШЕ блока из которога вызывается функция.
Соответственно никакой пользы от var f= func... vs function f()... нет.
Только лишний гемморой с отладко тому человеку, который потом будет испоьзовать такой код и случайно разделит его по разным блокам.

Андрей Параничев 08.10.2008 14:10

ZoNT,
Не надо ставить все с ног на голову. Вопрос был в различиях между
function name() {} и var name = funciton() {} - они есть и описаны в спецификации.

ZoNT 08.10.2008 14:15

это один из тех примеров, которые НЕ нужно применять.
Из оперы: есть ли разница, ставить в конце строки ; или нет...


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