Non è consigliabile utilizzare "Usa rigoroso" in ES6?


200

Non ho ancora familiarità con ECMAScript 6. Ho appena clonato il repository React Starter Kit, che utilizza ES6 per il codice dell'applicazione. Sono rimasto sorpreso di vedere che la linter è configurato di vietare occorrenze della use strictdirettiva, che ho pensato è stato consigliato in pre-ES6 JavaScript. Quindi qual è il punto?



Risposte:


257

I moduli ES6 sono sempre in modalità rigorosa. Per citare la parte pertinente delle specifiche :

10.2.1 Codice modalità rigorosa

Un'unità sintattica di script ECMAScript può essere elaborata utilizzando la sintassi e la semantica della modalità senza restrizioni o rigorose. Il codice viene interpretato come codice in modalità rigorosa nelle seguenti situazioni:

  • Il codice globale è un codice in modalità rigorosa se inizia con un prologo della direttiva che contiene una direttiva rigorosa sull'uso (vedere 14.1.1).
  • Il codice del modulo è sempre un codice di modalità rigoroso.
  • Tutte le parti di una ClassDeclaration o ClassExpression sono codici in modalità rigorosa.
  • Il codice di valutazione è un codice di modalità rigoroso se inizia con un prologo della direttiva che contiene una direttiva di utilizzo rigoroso o se la chiamata a valutazione è una valutazione diretta (vedere 12.3.4.1) contenuta nel codice di modalità rigorosa.
  • Il codice funzione è un codice di modalità rigoroso se la funzione FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition o ArrowFunction associata è contenuta nel codice di modalità rigorosa o se il codice che produce il valore dello slot interno [[ECMAScriptCode]] della funzione inizia con un prologo della direttiva che contiene una Direttiva sull'uso rigoroso.
  • Il codice funzione che viene fornito come argomento ai costruttori di funzioni e generatori incorporati è un codice di modalità rigoroso se l'ultimo argomento è una stringa che, quando elaborata, è un corpo funzione che inizia con un prologo della direttiva che contiene una direttiva rigorosa d'uso.

11
Qual è la differenza tra il codice globale e il codice del modulo? Penso di essere frainteso, poiché il codice del modulo per me significa tutto in module.js se lo richiedo ('modulo').
Maggio Oakes,

8
@BrynnMahsman ES2015 ha moduli nativi. CommonJS è solo una libreria e non ha nulla a che fare con la lingua.
Kit Sunde,

18
Grazie per la risposta. Quindi non è un modulo ES6 se non usa le parole chiave import / export? In questo momento sto usando il nodo 4 e non ho accesso alle parole chiave di importazione / esportazione e sto solo usando il modulo CommonJS module.exports e request () insieme alle funzionalità ES6 abilitate per impostazione predefinita. Spiegherebbe il motivo per cui devo usare rigorosamente all'inizio di ogni file. Quindi tecnicamente sto ancora scrivendo moduli CommonJS con alcune funzionalità ES6 abilitate in V8?
Maggio Oakes,

7
Per un esame dettagliato di "è un modulo?" , vedi nczonline.net/blog/2016/04/… "... mentre la presenza di importazione o esportazione potrebbe indicare un modulo, la mancanza di importazione o esportazione non indica chiaramente che il file non è un modulo. Quindi c'è nessun modo efficace per rilevare automaticamente che un file è un modulo durante l'analisi. "
ptim

1
Che cos'è esattamente un "modulo"? Ottengo l' stricterrore (con il preset AirBnB ) su uno script che consiste solo in "use strict"; console.log('foo'). È un modulo?
Dan Dascalescu il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.