Heim >Web-Frontend >js-Tutorial >JavaScript-Fortgeschrittenenreihe – Warum man eval nicht verwenden sollte

JavaScript-Fortgeschrittenenreihe – Warum man eval nicht verwenden sollte

黄舟
黄舟Original
2017-02-08 09:40:361351Durchsuche
  • 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
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
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
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)!


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