2017-04-03 1 views
2

Lorsque j'essaie de définir une variable à l'aide de var, tout fonctionne. Mais le définir comme const ne fonctionne pas comme prévu et la variable est indéfinie.Définir la variable constante à l'aide de eval()

window.eval("var v = 5;"); 
 
document.body.innerHTML += window.v === undefined; 
 

 
window.eval("const l = 5;"); 
 
document.body.innerHTML += window.l === undefined;

Je l'ai testé sur Chrome et Node.js. Est-ce que je manque quelque chose?

Merci d'avance!

Répondre

5

En effet, const active le mode strict par défaut. Voyez ce qui se passe lorsque vous activez le mode strict pour les deux exemples explicitement:

window.eval("'use strict'; var v = 5;"); 
 
document.body.innerHTML += window.v === undefined; 
 

 
window.eval("'use strict'; const l = 5;"); 
 
document.body.innerHTML += window.l === undefined;

Pour plus d'informations sur le mode strict voir:

En particulier cette partie:

Deuxièmement, l'évaluation du code de mode strict n'introduit pas de nouvelles variables dans la portée environnante. Dans le code normal, eval ("var x;") introduit une variable x dans la fonction environnante ou dans la portée globale. Cela signifie qu'en général, dans une fonction contenant un appel à eval, chaque nom ne faisant pas référence à un argument ou une variable locale doit être mappé à une définition particulière au moment de l'exécution (parce que eval aurait pu introduire une nouvelle variable qui cacherait le variable externe). En mode strict eval crée des variables uniquement pour le code en cours d'évaluation, afin eval ne peut pas affecter si un nom fait référence à une variable externe ou une variable locale [italiques]

Voir aussi cet article:

+0

Oh, ce sens. Je vous remercie! J'accepterai votre réponse dans quelques minutes :) – jooas