Показать сообщение отдельно
  #26 (permalink)  
Старый 01.04.2009, 00:11
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от kefi
Как же так получается для второго случая с FD, функция определяется единожды - еще до run-time
Нет, не единожды. Каждый раз при входе в контекст исполнения. Функция - это тоже контекст исполнения. Runtime здесь имеется в виду - выполнения кода контекста исполнения.

function fn () {
  var a = function _a() {};
  function b() {}
}


Что произошло:

1. Входим в контекст исполения функции "fn":

- Заполняется VO:

VO['a'] - создалась переменная "а", значение undefined;
VO['b'] - создалась FD "b";

2. Выполняем код контекста функции "fn" (вот он, runtime контекста):

- создалась FE "_a"
- VO['a'] = FE "_a"

Сообщение от kefi
Или все же не тела в обоих случаях, а ссылки на одно и тоже тело ?
Вообще, это вопрос о связывании переменных. Есть блок кода под определённым именем:

name ---> блок кода


Или:

function name() {
  // блок кода
}


Далее, присваиваем _name ссылку (тип Reference) на тот же блок кода:

var _name = name;

name ---> блок кода <--- _name

alert(name === _name); // true


Старое имя связываем с новым блоком кода:

name = function () {
  // новый блок кода
};

_name ---> блок кода
name ---> новый блок кода

alert(name === _name); // false


Восстанавливаем:

name = _name;


P.S.: а, отвлекался, долго писал, Zeroglif ответил уже.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 01.04.2009 в 00:24.
Ответить с цитированием