Книга: JavaScript. Подробное руководство, 6-е издание

4.12.1. eval()

4.12.1. eval()

Функция eval() принимает единственный аргумент. Если передать ей значение, отличное от строки, она просто вернет это значение. Если передать ей строку, она попытается выполнить синтаксический анализ этой строки как программного кода на языке JavaScript и возбудит исключение SyntaxError в случае неудачи. В случае успеха она выполнит этот программный код и вернет значение последнего выражения или инструкции в строке либо значение undefined, если последнее выражение или инструкция не имеют значения. Если программный код в строке возбудит исключение, функция eval() передаст это исключение дальше.

Ключевой особенностью функции eval() (когда она вызывается таким способом) является то обстоятельство, что она использует окружение программного кода, вызвавшего ее. То есть она будет отыскивать значения переменных и определять новые переменные и функции, как это делает локальный программный код. Если функция определит локальную переменную х и затем вызовет eval("x”), она получит значение локальной переменной. Вызов eval( "x=1") изменит значение локальной переменной. А если выполнить вызов eval("vaг у = 3; ”), будет объявлена новая локальная переменная у. Точно так же можно определять новые локальные функции:

eval("function f() { return x+1; }");

Если вызвать функцию eval() из программного кода верхнего уровня, она, разумеется, будет оперировать глобальными переменными и глобальными функциями.

Обратите внимание, что программный код в строке, передаваемой функции eval(), должен быть синтаксически осмысленным - эту функцию нельзя использовать, чтобы вставить фрагмент программного кода в вызывающую функцию. Например, бессмысленно писать вызов eval("return;"), потому что инструкция return допустима только внутри функций, а тот факт, что программный код в строке использует то же самое окружение, что и вызывающая функция, не делает его частью этой функции. Если программный код в строке может расцениваться как самостоятельный сценарий (пусть и очень короткий, такой как х=0), его уже можно будет передавать функции eval(). В противном случае eval() возбудит исключение SyntaxError.

Оглавление книги


Генерация: 0.091. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз