Есть ли способ указать, какой объект использовать для global при вызове eval()
?
(Я не спрашиваю, как сделать global eval().)
Это не работает, но это иллюстрирует то, что я хотел бы:
var pseudoGlobal = {};
eval("x = 12", pseudoGlobal);
pseudoGlobal.x; // 12
Дело в том, что на реальные глобальные привязки не влияет неявное объявление переменных (т.е. без ключевых слов var) в коде eval().
Что касается eval.call(pseudoGlobal, "x=12")
или eval.apply(pseudoGlobal, ["x=12"])
, некоторые интерпретаторы этого не допустят. .