Что делает функция eval и почему она клевая? Flashcards

1
Q

Что делает функция eval и почему она не клевая?

A

Код в eval способен получать доступ к внешним переменным, и это может иметь побочные эффекты.
Минификаторы кода (инструменты, используемые для сжатия JS-кода перед тем, как отправить его конечным пользователям) заменяют локальные переменные на другие с более короткими именами для оптимизации. Обычно это безопасная манипуляция, но не тогда, когда в коде используется eval, так как код из eval может изменять значения локальных переменных. Поэтому минификаторы не трогают имена переменных, которые могут быть доступны из eval. Это ухудшает степень сжатия кода.
Использование внутри eval локальных переменных из внешнего кода считается плохим решением, так как это усложняет задачу по поддержке такого кода.

Если код внутри eval не использует внешние переменные, то вызывайте его так – window.eval(…):

В этом случае код выполняется в глобальной области видимости:
let x = 1;
{
let x = 5;
window.eval(‘alert(x)’); // 1 (глобальная переменная)
}

Если коду внутри eval нужны локальные переменные, поменяйте eval на new Function и передавайте необходимые данные как аргументы:

let f = new Function(‘a’, ‘alert(a)’);

f(5); // 5

Она создаёт функцию из строки в глобальной области видимости. Так что локальные переменные для неё невидимы, но всегда можно передать их как аргументы. Получается очень аккуратный код, как в примере выше.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly