08. Eval
JS имеет встроенную функцию eval(code)
, которая позволяет выполнить код, переданный ей в виде строки.
Код внутри
eval()
выполнен в текущей области видимости.Вызов
eval()
возвращает последнее вычисленное выражение.При вызове
eval
имеет полный доступ к локальным переменным.В строгом режиме
eval()
имеет свою область видимости. Код внутриeval()
по-прежнему сможет читать и менять внешние переменные, однако переменные и функции, объявленные внутриeval()
, не попадут наружу.
Если выполняемый код всё же должен взаимодействовать с локальными переменными – используйте new Function('a,b', '..body..')
. Создавайте функцию из строки и передавайте переменные ей, это надёжно и безопасно.
В современном JS нет ни одной причины использовать eval()
:
Код внутри
eval()
не может быть оптимизирован заранее;Код внутри
eval()
не может быть минимифицирован.
The eval()
function isn’t the only way to execute a JavaScript string from within JavaScript. The same can be done using the Function
constructor as well as setTimeout()
and setInterval()
. Here are some examples:
All of these are considered bad practice by most of the JavaScript community. Although eval()
may be used from time to time in JavaScript libraries (mostly in relation to JSON), the other three uses are rarely, if ever, used. A good general guideline is to never use Function
and to use eval()
only if no other options are present. Both setTimeout()
and setInterval()
can be used but should use function instead of strings.
Last updated
Was this helpful?