Nella precedente lezione della nostra guida, abbiamo visto che Javascript non "obbliga" lo sviluppatore a dichiarare le variabili. In altre parole, la dichiarazione della variabile mediante la clausola var può essere considerata una buona abitudine di programmazione, ma non indispensabile ai fini del corretto funzionamento degli script.
In altre parola, Javascript consente di utilizzare nel codice anche variabili mai dichiarate senza produrre alcun avviso. Facciamo un esempio:
miavar = 123;
Nel codice qui sopra ho ipotizzato di introdurre per la prima volta nel mio script la varabile "miavar" pur omettendo la clausola var. Nonostante questa mia "imprecisione" l’interprete Javascript creerà ugualmente una variabile globale di nome "miavar" senza produrre alcun avviso.
Se sotto un certo punto di vista ciò può essere considerato alla strega di una comodità (il processo di sviluppo diventa meno rigoroso), in talune circostanze – soprattutto in contesti di sviluppo complessi – tale "comodità" potrebbe rivelarsi un’arma a doppio taglio in quanto questa tolleranza potrebbe portare lo sviluppatore ad introdurre errori nel codice rendendo più complesse le attività di debug.
In simili situazioni può essere utile fare ricorso al cosidetto strict mode, ovvero attivare per l’interprete Javascript una sorta di livello di "tolleranza zero". Tale possibilità è stata introdotta con JavaScript 1.8.5 (ECMAScript version 5) e prevede l’inserimento di una semplice stringa di testo all’inizio dello script:
"use strict";
// ...
// SEGUE IL CODICE DELLO SCRIPT
// ...
oppure all’inizio di una specifica funzione:
function foo() {
"use strict";
// ...
// CODICE DELLA FUNZIONE
// ...
}
E’ importante precisare che use strict non è un comando vero e proprio ma un literal expression (una stringa di testo) e che il suo effetto verrà prodotto solo sui browser che incorporano versioni recenti del motore Javascript. E’ evidente, pertanto, che tale dichiarazione non sortirà alcun effetto sui browser più obsoleti (in quanto la stringa verrà letta, senza essere compresa, dall’interprete senza produrre alcun errore).
Effetti prodotti da "use strict"
Una volta attivato lo strict mode, le pratiche prima ammesse dall’interprete diventeranno causa di errori. L’esempio più lampante riguarda le variabili non dichiarate:
"use strict";
miavar = 123;
Questo codice produrrà un errore in quanto "miavar" non è stata dichiarata.
Come detto la dichiarazione ad inizio dello script produrrà effetti globali, pertanto:
"use strict";
foo();
function foo() {
prezzo = 123;
document.write(prezzo);
}
anche questo codice genererà un errore, in quanto la variabile "prezzo", utilizzata all’interno della funzione, non è stata dichiarata.
Ben diverso il caso in cui use strict sia stato dichiarato all’inizio di una funzione. Vediamo un esempio:
miavar = 123;
foo();
function foo() {
"use strict";
prezzo = 123;
document.write(prezzo);
}
In quest’ultimo caso a produrre errore sarà solo "prezzo" in quanto "use strict" dispiegherà i suoi effetti solo nel contesto della funzione. Ne consegue che la dichiarazione imperfetta di "miavar" (esterna alla funzione) sarà considerata valida e funzionante dall’interprete Javascript.