Verdeckte Bewertung
Sicherheitsprobleme
Schlussfolgerung
eval führt eine Zeichenfolge von JavaScript-Code im aktuellen Bereich aus.
var foo = 1;
function test() {
var foo = 2;
eval('foo = 3');
return foo;
}
test(); // 3
foo; // 1
Nach dem Login kopieren
Eval wird jedoch nur dann im aktuellen Bereich ausgeführt, wenn es direkt aufgerufen wird und die aufrufende Funktion eval selbst ist.
var foo = 1;
function test() {
var foo = 2;
var bar = eval;
bar('foo = 3');
return foo;
}
test(); // 2
foo; // 3
Nach dem Login kopieren
Anmerkung des Übersetzers: Der obige Code entspricht dem Aufruf von eval im globalen Bereich und hat den gleichen Effekt wie die folgenden beiden Schreibweisen:
// 写法一:直接调用全局作用域下的 foo 变量
var foo = 1;
function test() {
var foo = 2;
window.foo = 3;
return foo;
}
test(); // 2
foo; // 3
// 写法二:使用 call 函数修改 eval 执行的上下文为全局作用域
var foo = 1;
function test() {
var foo = 2;
eval.call(window, 'foo = 3');
return foo;
}
test(); // 2
foo; // 3
Nach dem Login kopieren
In jedem Fall Wir sollten die Verwendung der Eval-Funktion vermeiden. 99,9 % der Szenarien, die eval verwenden, haben Lösungen, die eval nicht verwenden.
Getarnte Auswertung
Sowohl die geplanten Funktionen setTimeout als auch setInterval können Zeichenfolgen als ersten Parameter akzeptieren. Dieser String wird immer im globalen Bereich ausgeführt, daher wird eval in diesem Fall nicht direkt aufgerufen.
Sicherheitsprobleme
eval weist auch Sicherheitsprobleme auf, da eval niemals ausgeführt wird, wenn die Codezeichenfolge unbekannt ist oder von einer nicht vertrauenswürdigen Quellfunktion stammt.
Fazit
Verwenden Sie niemals eval, jeder Code, der es verwendet, ist hinsichtlich seiner Funktionsweise, Leistung und Sicherheit fragwürdig. Wenn in einer Situation die Verwendung von eval erforderlich ist, um ordnungsgemäß zu funktionieren, wird zunächst das Design in Frage gestellt. Dies sollte nicht die bevorzugte Lösung sein, und eine bessere Lösung, die eval nicht verwendet, sollte vollständig in Betracht gezogen und priorisiert werden.
Das Obige ist die JavaScript-Serie für Fortgeschrittene – warum nicht eval verwenden? Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!