Heim >Web-Frontend >js-Tutorial >JavaScript-Fortgeschrittenenreihe – Warum man eval nicht verwenden sollte
Verdeckte Bewertung
Sicherheitsprobleme
Schlussfolgerung
var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1Eval 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; // 3Anmerkung 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; // 3In 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 AuswertungSowohl 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. Sicherheitsproblemeeval weist auch Sicherheitsprobleme auf, da eval niemals ausgeführt wird, wenn die Codezeichenfolge unbekannt ist oder von einer nicht vertrauenswürdigen Quellfunktion stammt. FazitVerwenden 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)!