Если вы прочитаете страницу MDN на eval
, вы увидите:
, если вы используете функцию eval косвенно, вызывая ее по ссылке, отличной от evalНачиная с ECMAScript 5 он работает в глобальной области, а не в локальной области.
Когда вы запустите этот код в Node, он будет искать в глобальном объекте val
и не найдетэто потому, что даже переменные, объявленные во внешней области видимости, являются частными для включающего модуля в Node - они не попадают в глобальное пространство имен, если вы не поместите их туда.Это вызывает ошибку, которую вы заметили.
Это, однако, будет регистрировать global
в узле:
global['val'] = "global"
function foo2() {
let val = "local"
let f = eval
return f("val")
}
console.log(foo2())