1var a;
2console.log(a); // scrive in console "undefined" o "" a seconda del browser usato.
3console.log('still going...'); // scrive in console "still going...".
1function x() {
2 y = 1; // Genera un ReferenceError in strict mode
3 var z = 2;
4}
5
6x();
7
8console.log(y); // scrive "1" in console
9console.log(z); // Genera un ReferenceError: z non è definita fuori dalla funzione x
10
1var a = 1;
2b = 2;
3
4delete this.a; // Genera un TypeError in strict mode. Altrimenti fallisce senza generare messaggi.
5delete this.b;
6
7console.log(a, b); // Genera un ReferenceError.
8// La proprietà 'b' è stata cancellata e non esiste più.
1var x = 0;
2
3function f() {
4 var x = y = 1; // x è dichiarata localmente. y invece no!
5}
6f();
7
8console.log(x, y); // Genera un ReferenceError in strict mode (y non è definita). 0, 1 altrimenti.
9// In modalità non-strict mode:
10// x è la globale come si ci aspettava
11// però, y è uscita fuori dalla funzione!
1console.log(a); // Genera un ReferenceError.
2console.log('still going...'); // Non verrà eseguito.
1var nomevariabile1 [= valore1] [, nomevariabile2 [= valore2] ... [, nomevariabileN [= valoreN]]];
1var x = 0; // x è dichiarata dentro l'ambiente file, poi le è assegnato valore 0
2
3console.log(typeof z); // undefined, poichè z ancora non esiste
4
5function a() { // quando a è chiamata,
6 var y = 2; // y è dichiarata dentro l'ambiente della funzione a, e le è assegnato valore 2
7
8 console.log(x, y); // 0 2
9
10 function b() { // quando b è chiamata
11 x = 3; // assegna 3 all'esistente ambiente x, non crea una nuova variabile globale
12 y = 4; // assegna 4 all'esistente esterna y, non crea una nuova variabile globale
13 z = 5; // crea una nuova variabile globale z e le assegna valore 5.
14 } // (Throws a ReferenceError in strict mode.)
15
16 b(); // chiamare b crea z come variabile globale
17 console.log(x, y, z); // 3 4 5
18}
19
20a(); // chiamando a si richiama b
21console.log(x, z); // 3 5
22console.log(typeof y); // non definito, perchè y è locale alla funzione a