Dado que ECMA- / Javascript se trata Objectsy 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 (= windowen 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 windowobjeto 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();
newcrea una nueva instancia de un objeto autodefinido (contexto). Sin newel alcance de la función también sería global(= ventana). Este ejemplo alertaría undefinedy 1respectivamente. Si reemplazáramos this.a = 1; this.b = 2con:
var a = 1,
b = 2;
Ambas salidas de alerta estarían indefinidas. En ese escenario, las variables ay bse almacenarían en el Objeto de Activación desde el foobarcual no podemos acceder (por supuesto, podríamos acceder a ellas directamente llamando ay b).