Puisque ECMA- / Javascript est tout au sujet de Objects
et 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 (= window
dans 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' window
objet 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();
new
crée une nouvelle instance d'un objet auto-défini (contexte). Sans new
la portée de la fonction serait également global
(= fenêtre). Cet exemple alerterait undefined
et 1
respectivement. Si nous remplacions this.a = 1; this.b = 2
par:
var a = 1,
b = 2;
Les deux sorties d'alerte ne seraient pas définies. Dans ce scénario, les variables a
et b
seraient stockées dans l'objet d'activation à partir foobar
duquel nous ne pouvons pas accéder (bien sûr, nous pourrions accéder directement à celles-ci en appelanta
et b
).