Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der Definition, Verwendung und Nebenwirkungen der globalen JavaScript-Funktionsbewertung sowie weitere Beispiele

Ausführliche Erläuterung der Definition, Verwendung und Nebenwirkungen der globalen JavaScript-Funktionsbewertung sowie weitere Beispiele

伊谢尔伦
伊谢尔伦Original
2017-07-25 14:00:182616Durchsuche

eval() ist eine globale Funktion. JavaScript verwendet eval(), um eine Zeichenfolge aus Javascript-Quellcode zu interpretieren und auszuführen


var result = eval('3+2');
console.log(result,typeof result);//5 'number'

Verwendung

eval() hat nur einen Parameter. Wenn der übergebene Parameter kein String ist, wird dieser Parameter direkt zurückgegeben. Wenn der Parameter eine Zeichenfolge ist, wird die Zeichenfolge als Javascript-Code kompiliert. Wenn die Kompilierung fehlschlägt, wird eine syntaxError-Ausnahme ausgelöst. Wenn die Kompilierung erfolgreich ist, beginnt die Ausführung dieses Codes und der Wert des letzten Ausdrucks oder der letzten Anweisung in der Zeichenfolge wird zurückgegeben. Wenn der letzte Ausdruck oder die letzte Anweisung keinen Wert hat, wird schließlich undefiniert zurückgegeben. Wenn die Zeichenfolge eine Ausnahme auslöst, übergibt diese Ausnahme den Aufruf an eval()


var num = 1;
var str = 'test';
console.log(eval(num));//1
console.log(eval(str));//ReferenceError: test is not defined 
var strLong1 = 'var x = 1;var y = 2;';
console.log(eval(strLong1),x,y);//undefined 1 2
var strLong2 = 'var x = 1; x++;';
console.log(eval(strLong2),x);//1 2

scope >
eval () verwendet die Variablenbereichsumgebung, in der es aufgerufen wird. Das heißt, es sucht nach dem Wert einer Variablen und definiert neue Variablen und Funktionen genauso wie der Code im lokalen Bereich



var b = 2;
function foo(str,a){
eval(str);
console.log(a,b);
}
foo('var b = 3;',1);//1 3
Alias ​​​​


Wenn eval() über einen Alias ​​aufgerufen wird, führt es seine Zeichenfolge als globalen Code der obersten Ebene aus. Der ausgeführte Code kann neue globale Variablen und globale Funktionen definieren oder globalen Variablen Werte zuweisen, kann jedoch keine lokalen Variablen in der Funktion



verwenden oder ändern

[Hinweis] IE8 – Die Ergebnisse des Aufrufs von eval() über Aliase und des Aufrufs von eval() sind normalerweise die gleichen
var geval = eval; 
var x = 'global',y = 'global'; 
function f(){
var x = 'local';
eval('x += "changed";');
return x;
}
function g(){
var y = 'local';
geval('y += "changed";');
return y;
}
console.log(f(),x);//localchanged global
console.log(g(),y);//local globalchanged


Nebenwirkungen

JavaScript Interpreter Viel Code-Analyse und -Optimierung. Das Problem bei eval() besteht darin, dass der für die dynamische Ausführung verwendete Code normalerweise nicht analysiert werden kann, sodass der Interpreter ihn nicht optimieren kann, was zu Leistungseinbußen führt


Ähnlich wie eval() ist setTimeout() , setInterval(), new Function() usw. Diese Funktionen können Zeichenfolgen als Parameter annehmen und dynamisch ausgeführt werden, wenn das Programm ausgeführt wird. Die Vorteile dieses Ausführungsmechanismus können den Leistungsverlust nicht ausgleichen, daher sollten Sie versuchen, die Verwendung des


strikten Modus


aufgrund von eval( )-Funktion ist zu mächtig und der strikte Modus erlegt ihr strenge Einschränkungen auf


[1] Variablen oder Funktionen können nicht über die Funktion eval() erstellt werden, ihre Werte können jedoch abgefragt und geändert werden



【2】Es ist verboten, eval als Bezeichner zu verwenden
'use strict';
eval('var x = 1;');
console.log(x);//ReferenceError: x is not defined
'use strict';
var x = 1;
eval('x = 2;');
console.log(x);//2



Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Definition, Verwendung und Nebenwirkungen der globalen JavaScript-Funktionsbewertung sowie weitere Beispiele. 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