Сообщение от kefi
|
но возник еще объект активации AO...
|
Activation object (Объект активации, AO) касается только контекста исполнения типа "Функция".
Кстати, в предыдущем посте, говоря о VO, в большей мере имелся в виду VO функции.
AO создаётся при входе в контекст функции и инициализируется свойством arguments, значением которого является
Arguments object (Объект аргументов, обозначим ArgO, чтобы не путать с AO):
AO = {
arguments: <ArgO>
};
Далее, этот AO становится ничем иным как VO. Поэтому, говоря о VO в контексте типа "функция", можно использовать и терминологию AO, т.к. здесь VO === AO. Образно в предыдущем посте (чтобы не перегужать и не приплетать arguments) я назвал это "наследуется", физически же, это тот же самый объект.
Говоря о VO в глобальном контексте, - сам глобальный объект является VO (в браузере - window).
Сообщение от kefi
|
а еще есть arguments,
|
Arguments object (ссылка выше) - объект, находящийся в VO/AO функции; содержит свойства:
- callee - ссылка на выполняемую функцию;
- length - количество реально переданных параметров;
- свойства-индексы (числовые, приведённые к строке), значения которых есть формальные параметры функции (слева направо в списке параметров). Количество этих свойств-индексов == arguments.length. Значения свойств-индексов объекта arguments и присутствующие формальные параметры - взаимозаменяемы:
function a(x, y, z) {
alert(arguments.length); // 2
alert(arguments.callee === a); // true
alert(x === arguments[0]); // true
alert(x); // 10
arguments[0] = 20;
alert(x); // 20
x = 30;
alert(arguments[0]); // 30
}
a(10, 20);
Сообщение от kefi
|
Да, и еще бы понять, чьи они свойства - если функции , то в глобальном контексте если находимся - тогда чьи ?
|
Если код входит в контекст функции, то это свойства функции. Если мы находимся в глобальном коде, то сам глобальный объект - есть VO.
Если всё понятно, можно будет продолжить про [[Scope]].