In JavaScript können Sie die Funktion eval () verwenden, um den JavaScript -Code in eine Zeichenfolge zu analysieren und das entsprechende Code -Ausführungsergebnis zurückzugeben:
Die Codekopie lautet wie folgt:
console.log (eval ("42 * 2")); // 84
Eval () ist im Wesentlichen eine Funktion eines JavaScript -globalen Objekts. Zum Beispiel entspricht der obige Code:
Die Codekopie lautet wie folgt:
console.log (this.eval ("42 * 2")); // 84
Bei der Verwendung der EVAL () -serklärung wird jedoch die erste oben erwähnte Methode im Allgemeinen angewendet, dh das globale Objekt ignorieren und eval () direkt verwenden.
Verwendung von eval ()
Aus den folgenden zwei Gründen sollten Sie nicht versuchen, die Verwendung der Eval () -serklärung in Ihrem Code zu vermeiden:
1. Logischerweise sollten Zeichenfolgen verwendet werden, um Inhalte und Informationen während des Programmvorgangs zu speichern, anstatt eine spezifische Berechnungslogik zu speichern.
2. Da der Parameter eval () eine Zeichenfolge ist und für eine Zeichenfolge nicht lexikalisch sein kann, kann der JavaScript -Interpreter für die Call -Anweisung eval () nicht optimieren.
Rückgabewert von eval ()
Der Rückgabewert von eval () folgt den folgenden Regeln:
1. Wenn der Parameter von Eval () keine Zeichenfolge ist, gibt Eval () den Parameter direkt zurück.
2. Wenn der Parameter von eval () eine Zeichenfolge ist, dann analysiert Eval () die Zeichenfolge in Code und führt ihn aus und gibt das Ergebnis der letzten Codeausführung zurück.
3. Wenn die Zeichenfolge nicht in einen legitimen Code analysiert werden kann, werfen Eval () einen SyntaxErrorfehler.
4. Wenn eine Zeichenfolge in Rechtskodex analysiert werden kann, während der Ausführung dieses Codes jedoch ein Fehler gemeldet wird, wird der Fehler an die Aussage von Eval () gemeldet und von eval () geworfen.
Die Codekopie lautet wie folgt:
console.log (eval ([1,2,3]); // [1, 2, 3]
console.log (typeof eval ([1,2,3])); // Objekt
console.log (eval ("42 */2")); // syntaxError
console.log (eval ("42 * 2; 22 * 3;")); // 66. Eval gibt das Ergebnis des letzten Ausdrucks/der letzten Ausdruck/Anweisung zurück
console.log (eval ("null.toString ()")); // typeerrror, Ausnahme im eval-ed-Code wird externen eval () propagiert.
variable Umgebung
Eval () in JavaScript hat ein wichtiges Merkmal: Der Code in der Parameterzeichenfolge eval () kann im externen Code auf Variablen zugreifen und auch die neu erstellten Variablen im Parameter -String -Code dem externen Code aussetzen. Das heißt, wenn die Parameterzeichenfolge eval () legal analysiert werden kann, ersetzt JS den analysierten Code durch die Zeile, in der Eval () sich befindet:
Die Codekopie lautet wie folgt:
// variable Umgebung
var a = 108;
console.log (eval ("Funktion double (x) {return x*2;} a = double (a)"));
console.log (a); // 216
console.log (double (33)); // 66
Es ist erwähnenswert, dass die Voraussetzung für die Implementierung der obigen Funktion darin besteht, dass der Code in der Parameterzeichenfolge eval () legal analysiert werden kann. Zusätzlich zur korrekten Code-Syntax verlangt JS auch, dass der Code in der Parameterzeichenfolge eval () "selbst organisiert" sein muss: Der Code muss nur in Bezug auf den Code in der Parameterzeichenfolge sinnvoll sein. Zum Beispiel ist es unmöglich, eine Zeichenfolge wie "Rückkehr" zu übergeben. zur Funktion eval ():
Die Codekopie lautet wie folgt:
Funktionstest () {
var s = "test";
eval ("return s;");
}
test (); // syntaxError: zurück in die Funktion zurückkehren
Wenn Sie die Funktion eval () direkt verwenden, sind die vom Code in der Parameterzeichenfolge eval () zugegriffenen Variablen diese Variablen in der Funktion, in der sich die EVAL () -Antage befindet, dh die von der Funktion eval () verwendete variable Umgebung ist die "lokale variable Umgebung". Wenn Sie die Funktion eval () nicht direkt verwenden, sondern eine neue Variable verwenden, die auch auf die Funktion eval () hinweist, sind die vom Code in der entsprechenden Parameterzeichenfolge zugegriffenen Variablen globale Variablen, dh die variable Umgebung, die von der Funktion eval () verwendet wird, "globale variable Umgebung":
Die Codekopie lautet wie folgt:
// Lokale variable Umgebung und globale variable Umgebung
var umbenannt = eval;
var x = "Ursprung", y = "Origin";
Funktion f () {
var x = "neu";
eval ("x += 'verändert';");
Rückkehr x;
}
Funktion g () {
var y = "neu";
umbenannt ("y += 'verändert';");
kehre y zurück;
}
console.log (f (), x); // New Changed Origin
console.log (g (), y); // Neue OriginChanged
Es ist jedoch erwähnenswert, dass das Verhalten in IE6, 7 und 8 unterschiedlich ist. In IE6, 7 und 8, auch wenn die Funktion eval () umbenannt wird, wird die "lokale variable Umgebung" noch verwendet.