Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung des Rückgabewerts der Funktion eval() und Anwendungsbeispiele für Variablenumgebungen in JavaScript

Ausführliche Erläuterung des Rückgabewerts der Funktion eval() und Anwendungsbeispiele für Variablenumgebungen in JavaScript

伊谢尔伦
伊谢尔伦Original
2017-07-25 14:18:378552Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn