Verwendung von eval()
Aus den folgenden zwei Gründen sollten Sie versuchen, die Verwendung der eval()-Anweisung in Ihrem Code zu vermeiden, es sei denn, dies ist wirklich notwendig:
1 .Logisch gesehen sollten Zeichenfolgen zum Speichern von Inhalten und Informationen während der Programmausführung verwendet werden und nicht zum Speichern spezifischer Berechnungslogik.
2. Da der eval()-Parameter ein String ist und ein String nicht lexikalisch verarbeitet werden kann, kann der JavaScript-Interpreter die eval()-Aufrufanweisung nicht optimieren.
Der Rückgabewert von eval()
Der Rückgabewert von eval() folgt den folgenden Regeln:
1 () ist keine Zeichenfolge, dann gibt eval() den Parameter direkt zurück.
2. Wenn der Parameter von eval() eine Zeichenfolge ist, analysiert eval() die Zeichenfolge in Code, führt ihn aus und gibt das Ergebnis der letzten Codeausführungszeile zurück.
3. Wenn die Zeichenfolge nicht in legalen Code geparst werden kann, löst eval() einen SyntaxError aus.
4. Wenn die Zeichenfolge in legalen Code analysiert werden kann, während der Ausführung dieses Codes jedoch ein Fehler gemeldet wird, wird der Fehler an die eval()-Anweisung gemeldet und von eval() ausgelöst.
console.log(eval([1,2,3]));//[1, 2, 3] console.log(typeof eval([1,2,3]));//object console.log(eval("42 */ 2"));//SyntaxError console.log(eval("42 * 2; 22 * 3;"));//66. eval returns the result of last expression/statement console.log(eval("null.toString()"));//TypeError, exception in eval-ed code will be propagated outside eval().
Variablenumgebung
Es gibt eine wichtige Funktion von eval() in JavaScript: Der Code in der Parameterzeichenfolge eval() kann auf Variablen in externem Code zugreifen , und Sie können die neu erstellten Variablen im Parameterzeichenfolgencode auch externem Code zugänglich machen. Das heißt, wenn die Parameterzeichenfolge eval() legal analysiert werden kann, ersetzt JS die Zeile, in der sich eval() befindet, durch den analysierten Code:
//variable environment var a = 108; console.log(eval("function double(x){return x*2;} a = double(a)")); console.log(a);//216 console.log(double(33));//66
Es ist erwähnenswert, dass dies zur Implementierung des oben Gesagten erforderlich ist Features Die Voraussetzung ist, dass der Code in der Parameterzeichenfolge eval() legal analysiert werden kann. Neben der korrekten Syntax des Codes verlangt JS auch, dass der Code in der Parameterzeichenfolge eval() „eigenständig“ sein muss: Der Code darf nur für den Code in der Parameterzeichenfolge sinnvoll sein. Sie können beispielsweise keine Zeichenfolge wie „return;“ an die Funktion eval() übergeben:
function test(){ var s = "test"; eval("return s;"); } test();//SyntaxError: return not in function
Wenn Sie die Funktion eval() direkt verwenden, dann der Code in der Parameterzeichenfolge eval() Zugriffe Die Variablen sind diejenigen der Funktion, in der sich die eval()-Anweisung befindet, dh die von der eval()-Funktion verwendete Variablenumgebung ist die „lokale Variablenumgebung“. Wenn Sie die Funktion eval() nicht direkt verwenden, sondern eine neue Variable verwenden, die auch auf die Funktion eval() verweist, sind die Variablen, auf die der Code in der entsprechenden Parameterzeichenfolge zugreift, globale Variablen, also die von verwendeten Variablen Die Funktion eval() ist die „globale Variablenumgebung“:
//local variable environment and global variable environment var renamed = eval; var x = "origin", y = "origin"; function f(){ var x = "new"; eval("x += 'Changed';"); return x; } function g(){ var y = "new"; renamed("y += 'Changed';"); return y; } console.log(f(), x);//newChanged origin console.log(g(), y);//new originChanged
Es ist jedoch zu beachten, dass das Verhalten in IE6, 7 und 8 unterschiedlich ist. In IE6, 7 und 8 wird die „lokale Variablenumgebung“ weiterhin verwendet, auch wenn die Funktion eval() umbenannt wird.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Rückgabewerts der Funktion eval() und Anwendungsbeispiele für Variablenumgebungen in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!