Come si può aggiungere "yield" come parola chiave in ES6 se non era una parola riservata?

4

yield non è una parola riservata in JavaScript, tuttavia ES6 ne fa una parola chiave.

Ho pensato che il punto delle parole riservate fosse per la retrocompatibilità. Ad esempio, let e const sono stati riservati, quindi non è possibile utilizzare tali parole come nomi di variabili nel codice ES5. Ciò garantisce che il tuo codice ES5 funzioni correttamente con un motore ES6.

... ma cosa succede se hai usato yield come nome di una variabile? Perché questa parola non era riservata? E se non importa, allora perché sono state eventuali parole riservate?

    
posta callum 30.03.2015 - 19:24
fonte

1 risposta

6

In ECMAScript 5, yield è una modalità rigorosa " Parola riservata futuro ":

7.6.1.2 Future Reserved Words

The following words are used as keywords in proposed extensions and are therefore reserved to allow for the possibility of future adoption of those extensions.

...

class enum    extends super
const export  import  

The following tokens are also considered to be FutureReservedWords when they occur within strict mode code (see 10.1.1). The occurrence of any of these tokens within strict mode code in any context where the occurrence of a FutureReservedWord would produce an error must also produce an equivalent error:

implements  let      private    public  yield
interface   package  protected  static    

Ciò significa che in un codice non rigoroso, le tue preoccupazioni sono corrette: la correttezza della riga var yield = 5; sarà diversa in modalità non rigorosa tra un'implementazione ES5 e ES6. Tuttavia, in modalità rigorosa, la linea è invariabilmente invalida per ES5 e ES6. Ciò significa che dovresti utilizzare la modalità rigorosa ogni volta che è possibile per massimizzare la compatibilità diretta del tuo codice ES5.

Per quanto riguarda perché yield non era completamente riservato per codice non severo, presumo che ciò sia stato fatto per collegare la compatibilità tra ES3, che non includeva yield come FutureReservedWord (vedi sezione ES3 7.5.3, a pagina 14 ). Per introdurre yield , il comitato ha dovuto interrompere la compatibilità da qualche parte, sia nella transizione da 3 a 5 sia nella transizione da 5 a 6. Tuttavia, alcune parole riservate incluse in ES3 sono state sottoposte a downgrade in parole riservate in modalità rigorosa in ES5. Non conosco la logica per questa decisione.

    
risposta data 30.03.2015 - 19:49
fonte

Leggi altre domande sui tag