Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 106
Ist eval() eine Funktion oder ein Operator?
Оглавлениеeval() ist eine Funktion, wird aber trotzdem in diesem Kapitel über Ausdrücke und Operatoren behandelt, weil es eigentlich ein Operator hätte sein sollen. Die eval()-Funktion gibt es bereits seit den frühesten Versionen von JavaScript, aber die Sprachentwickler und Programmierer des Interpreters haben sie seitdem kontinuierlich mit Einschränkungen versehen, die zu immer größerer Ähnlichkeit mit einem Operator geführt haben. Moderne JavaScript-Interpreter führen eine Vielzahl von Codeanalysen und -optimierungen durch. Allgemein gesagt: Ruft eine Funktion eval() auf, kann der Interpreter diese Funktion nicht mehr optimieren. Weil eval() als Funktion vorliegt, kann man ihr einen anderen Namen geben – und das ist das Problem:
let f = eval;
let g = f;
In solchen Fällen kann der Interpreter nicht mehr mit Sicherheit erkennen, welche Funktionen eval() aufrufen, und deshalb nicht mehr aggressiv optimieren. Dieses Problem hätte man vermeiden können, wäre eval() tatsächlich ein Operator (und ein reserviertes Wort). Wir werden weiter unten (in 4.12.2 und 4.12.3) die Einschränkungen kennenlernen, denen man eval() unterworfen hat, damit es eher einem Operator ähnelt.