di: Rajasekharan Vengalil 22 Novembre 2011
Questa è la traduzione dell'articolo Debug your site faster with ECMAScript Strict Mode di Rajasekharan Vengalil pubblicato originariamente su msdn. La traduzione viene qui presentata con il consenso dell'editore e dell'autore.
ECMAScript, ratificato come punto di riferimento per i linguaggi di scripting dall'Ecma International, si può considerare lo standard di riferimento per quello che il mondo conosce come JavaScript.
Per essere precisi, JavaScript ed ECMAScript non sono identici. JavaScript è un dialetto di ECMAScript, ma le differenze sono per lo più trascurabili e in gran parte esistono per motivi storici di compatibilità. ECMAScript 5, l'ultima versione disponibile, (d'ora in poi denominato ES5) mette sul tavolo una serie di caratteristiche molto interessanti. La maggior parte di queste nuove funzionalità sono progettate per portare maggiore disciplina la programmazione al linguaggio.
In questo articolo ci concentriamo sulla modalità Strict, una delle caratteristiche che affronta direttamente alcune delle parti più note del linguaggio. Essenzialmente, si tratta di una modalità completamente nuova per JavaScript che fa sì che il motore di esecuzione esegua codice con una semantica leggermente diversa.
La modalità Strict di Javascript forza il runtime engine ad interpretare ed eseguire il codice Javascript con una semantica diversa da quella che vedremmo in modalità normale ("unrestricted"). Il codice che gira in "strict mode" sottostà ad alcune caratteristiche:
.js in un colpo solo (a meno di concatenarli tutti insieme).L'idea alla base della modalità Strict è quella di introdurre una sorta di disciplina, forzata a runtime, da cotrappore ad alcune pratiche di sviluppo con Javascript. Questo può essere visto come un modo per introdurre un maggiore rigore nell'eccessivo dinamismo che caratterizza JavaScript.
Quando si contrassegna un segmento di codice come "strict", molte delle parti più spinose di JavaScript vengono forzate dal motore stesso, invece di richiedere l'intervento del programmatore.
Per esempio, riuscireste ad individuare il bug presente nel seguente frammento? Con la modalità Strict, lo fa direttamente il compilatore.
function findProduct(numbers) {
var product = 0,
len = numbers.length;
for(var i = 0; i < len; ++i) {
prodct = product * numbers[i];
}
return product;
}
Praticamente tutti i browser moderni supportano la modalità Strict nei propri motori JavaScript, compresi Internet Explorer, Chrome, Firefox, Safari e Opera. In Internet Explorer (IE), la modalità Strict è disponibile a partire dalla versione 10, la cui anteprima è disponibile su IE Test Drive. Tutti gli esempi presenti in questo articolo sono stati testati sulla piattaforma IE10 utilizzando la JavaScript eval console, mentre solo alcuni di essi sono stati testati anche su Chrome 14 e su Firefox 7 versione Beta.
Far girare un pezzo di codice JavaScript in modalità Strict è veramente semplice. Ecco un esempio:
"use strict";
alert("Look ma! Strict Mode!");
Il bello è che questo codice è perfettamente valido anche in ECMAScript 3 (ES3 è l'edizione precedente di ECMAScript). Un motore ES3 JavaScript ignora semplicemente la linea di noop e procede con l'esecuzione del resto dello script. In effetti questa sorta di compatibilità sintattica reatroattiva con ES3 era un obiettivo chiave del progetto di ES5. Una parte sorprendentemente ampia della specifica ES5 può essere implementata completamente in ES3 JavaScript. Tuttavia la modalità Strict è un esempio di funzione ES5 che forse non può essere implementata in maniera pura in ES3 JavaScript, ma necessita di un compilatore che la supporti.
Diamo uno sguardo alle tipologie di codice JavaScript che può essere scritto per girare in Strict Mode:
Global code
Si tratta semplicemente del codice che inseriamo all'interno di un tag <script>. Per esempio:
<script > "use strict"; // global Strict Mode code here </script >
Notiamo che con HTML5 non è più necessario aggiungere l'attributo type nel tag <script>.
Eval code
È il codice che passiamo alla funzione Eval che ha come prefisso la direttiva Strict Mode (use strict):
eval("'use strict'; // strict code here");
Oppure che è invocato dal codice in modalità strict:
"use strict";
eval("// strict code here");
Function code
Funzioni che hanno la direttiva Strict Mode come prefisso apposto prima del resto del codice (mettere la direttiva in qualsiasi altro punto non conta):
function foo() {
"use strict";
// strict code here
}
Le funzioni dichiarate nel codice in modalità Strict ereditano la "strictness":
function foo() {
"use strict";
var bar = function () {
// strict code here
};
bar();
}
Nota: Quest'ultimo caso è particolarmente rilevante quando si definiscono callback per gli event handler.
È altresì importante osservare che la modalità strict non si propaga nello stack di chiamate. Ecco un esempio:
function foo() {
// not Strict Mode even though
// foo is being invoked from a
// "strict" function
}
function bar() {
"use strict";
foo();
}
bar();
|
Il porting di Cut the Rope in un browser HTML5: i retroscena |
Guida jQuery MobileCreare siti mobile e applicazioni specifiche per Android, iPhone e... |
Canvas, guida praticaCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida jQuery UICreare siti ricchi e dinamici con jQuery UI, il progetto ufficiale... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base27 Febbraio 2012 a Milano |
|
|
Corso Webmaster base12 Marzo 2012 a Milano |
|
|
Corso JQuery e Ajax per Webmaster19 Marzo 2012 a Milano |
|
|
Corso Webmaster base19 Marzo 2012 a Roma |
|
|
Corso Google AdWords Base28 Marzo 2012 a Roma |