Сообщение от 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 ответил уже.