По сути это означает, что new Function('...')
и eval('...')
работают аналогичным образом, в том смысле, что они будут оценивать строку в аргументе как выражение JS. Тем не менее, они имеют различные правила определения области действия:
new Function()
имеет доступ только к глобальной области действия eval()
имеет доступ к локальной области действия
Примером будет такой:
- Вы создаете функцию, скажем
f
, которая равна new Function('console.log(x)')
, и затем вызываете ее. Независимо от того, какая область вызова f()
вызывается, она всегда записывает значение x
в глобальную область действия - У вас есть
eval('console.log(x)')
. Значение x
зависит от области действия eval()
в:
const x = 'global x';
const f = new Function('console.log(x)');
f(); // logs 'global x'
eval('console.log(x)'); // logs 'global x'
// Let's create a function scope
function test() {
const x = 'local x';
const f = new Function('console.log(x)');
f(); // logs 'global x'
eval('console.log(x)'); // logs 'local x';
}
test();