Puisque ECMA- / Javascript est tout au sujet de Objectset Contexts(qui sont également une sorte d'objet), chaque variable est stockée dans une telle appelée Variable- (ou dans le cas d'une fonction, un objet d'activation ).
Donc, si vous créez des variables comme ceci:
var a = 1,
b = 2,
c = 3;
Dans la portée globale (= contexte de fonction NO), vous écrivez implicitement ces variables dans l' objet global (= windowdans un navigateur).
Ceux-ci sont accessibles en utilisant la notation "point" ou "parenthèse":
var name = window.a;
ou
var name = window['a'];
Cela ne fonctionne que pour l'objet global dans cette instance particulière, car l' objet variable de l' objet global est l' windowobjet lui-même. Dans le contexte d'une fonction, vous n'avez pas d'accès direct à l' objet d'activation . Par exemple:
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
alert(name);
name = this['a']; // === 1
alert(name);
}
new foobar();
newcrée une nouvelle instance d'un objet auto-défini (contexte). Sans newla portée de la fonction serait également global(= fenêtre). Cet exemple alerterait undefinedet 1respectivement. Si nous remplacions this.a = 1; this.b = 2par:
var a = 1,
b = 2;
Les deux sorties d'alerte ne seraient pas définies. Dans ce scénario, les variables aet bseraient stockées dans l'objet d'activation à partir foobarduquel nous ne pouvons pas accéder (bien sûr, nous pourrions accéder directement à celles-ci en appelanta et b).