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.