2017-04-03 6 views
2

Wenn ich versuche, eine Variable mit Var definieren, funktioniert alles.Definieren const-Variable mit eval()

Aber es als const zu definieren funktioniert nicht wie erwartet und die Variable ist nicht definiert.

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

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

Ich habe es auf Chrome und Node.js. getestet Fehle ich etwas?

Vielen Dank im Voraus!

Antwort

5

Das ist, weil const den strikten Modus standardmäßig aktiviert. Sehen Sie, was passiert, wenn Sie auf der Strict-Modus für beide Beispiele drehen ausdrücklich:

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;

Für weitere Informationen über den Strict-Modus finden Sie unter:

Insbesondere dieser Teil:

Zweitens, Eval des strikten Modus-Codes führt keine neuen Variablen in den umgebenden Bereich ein. Im normalen Code führt eval ("var x;") eine Variable x in die umgebende Funktion oder den globalen Gültigkeitsbereich ein. Dies bedeutet, dass in einer Funktion, die einen Aufruf von eval enthält, jeder Name, der nicht auf ein Argument oder eine lokale Variable verweist, einer bestimmten Definition zur Laufzeit zugeordnet werden muss (weil dieses eval möglicherweise eine neue Variable eingeführt hat, die die äußere Variable). In Strict-Modus eval erzeugt nur Variablen für den Code ausgewertet werden, so beeinflussen eval nicht, ob ein Name auf eine äußere Variable oder eine lokale Variable [Hervorhebung hinzugefügt]

Siehe auch dieser Artikel bezieht sich:

+0

Oh, das macht Sinn. Vielen Dank! Ich akzeptiere deine Antwort in ein paar Minuten :) – jooas