«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Когда использовать `eval ()` и `new Function ()` в JavaScript?

Когда использовать `eval ()` и `new Function ()` в JavaScript?

Опубликовано в 2025-04-13
Просматривать:885

When to Use `eval()` vs `new Function()` in JavaScript?

Различие Eval () и New Function () в JavaScript

в JavaScript, разработчики часто сталкиваются с двумя функциями, которые, по -видимому, выполняют аналогичную задачу: eval () и new Function (). В то время как обе функции оценивают строки как код, их базовые механизмы и последствия значительно различаются.

eval () против New Function ()

функция eval () оценивает строку как выражение Javascript в рамках текущего исполнения. Это означает, что он имеет доступ к локальным переменным, определенным в текущей области. Напротив, New Function () анализирует код JavaScript, хранящийся в строке в объекте функции, который затем можно вызвать. Этот объект функции создается в отдельной области и, следовательно, не может получить доступ к локальным переменным призванной среды. return eval ('(' string ')'); } var func = function (string) { return (new Function ('return (' string ')') ()); } console.log (evaluate ('2 1')); console.log (func ('2 1'));

] обе функции выведут ожидаемый результат 3. Однако, если мы изменем код для использования локальных переменных, разница становится очевидной: test1 () { var a = 11; eval ('(a = 22)'); // изменяет локальную переменную в функции `test1` предупреждение (а); // оповещения 22 }

В этом случае с использованием eval () изменит локальную переменную A, потому что оценка происходит в области функции Test1. Однако, если бы мы использовали новую функцию ('return (a = 22);') () вместо этого локальная переменная A останется незатронутой, потому что код работает в отдельной области. Злоусовечник может потенциально обнародовать конфиденциальную информацию или выполнять произвольный код. Следовательно, настоятельно рекомендуется избегать использования этих функций, если это не абсолютно необходимо.

var evaluate = function(string) {
    return eval('('   string   ')');
}

var func = function(string) {
    return (new Function( 'return ('   string   ')' )());
}

console.log(evaluate('2   1'));
console.log(func('2   1'));
Заключение

function test1() {
    var a = 11;
    eval('(a = 22)'); // Modifies the local variable within the `test1` function
    alert(a);            // Alerts 22
}
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3