Поскольку ECMA- / Javascript - это все Objects
и Contexts
(которые также являются некоторыми объектами Object), каждая переменная хранится в такой переменной Variable (или в случае функции, объекта активации).
Итак, если вы создаете такие переменные:
var a = 1,
b = 2,
c = 3;
В глобальной области контекста (= NO) вы неявно записываете эти переменные в объект Global (= window
в браузере).
Доступ к ним можно получить с помощью обозначения «точка» или «скобка»:
var name = window.a;
или
var name = window['a'];
работает только для глобального объекта в этом конкретном экземпляре, поскольку объект Variable Object глобального объекта является объектом window
. Внутри контекста функции у вас нет прямого доступа к объекту активации. Например:
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
alert(name);
name = this['a']; // === 1
alert(name);
}
new foobar();
new
создает новый экземпляр самоопределяемого объекта (контекста). Без new
область действия функции также будет global
(= окно). В этом примере будут предупреждены undefined
и 1
соответственно. Если бы мы заменили this.a = 1; this.b = 2
на:
var a = 1,
b = 2;
Оба вывода оповещений были бы неопределенными. В этом случае переменные a
и b
будут храниться в объекте активации из foobar
, к которому мы не можем получить доступ (конечно, мы могли бы получить доступ к ним напрямую, вызывая a
и b
).