Dado que ECMA- / Javascript se trata Objects
y Contexts
(que también son una especie de Objeto), cada variable se almacena en una variable llamada Variable- (o en el caso de una Función, Objeto de Activación ).
Entonces, si creas variables como esta:
var a = 1,
b = 2,
c = 3;
En el ámbito Global (= contexto de función NO), usted escribe implícitamente esas variables en el objeto Global (= window
en un navegador).
Se puede acceder a ellos utilizando la notación "punto" o "paréntesis":
var name = window.a;
o
var name = window['a'];
Esto sólo funciona para el objeto global en este caso particular, debido a que el objeto variable del objeto global es el window
objeto en sí. Dentro del contexto de una función, no tiene acceso directo al objeto de activación . Por ejemplo:
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
alert(name);
name = this['a']; // === 1
alert(name);
}
new foobar();
new
crea una nueva instancia de un objeto autodefinido (contexto). Sin new
el alcance de la función también sería global
(= ventana). Este ejemplo alertaría undefined
y 1
respectivamente. Si reemplazáramos this.a = 1; this.b = 2
con:
var a = 1,
b = 2;
Ambas salidas de alerta estarían indefinidas. En ese escenario, las variables a
y b
se almacenarían en el Objeto de Activación desde el foobar
cual no podemos acceder (por supuesto, podríamos acceder a ellas directamente llamando a
y b
).