SpiderMonkey, который не перестает удивлять, давно умеет запускать произвольный код изолированно от остального мира, внутри так называемых песочниц. Эта возможность завораживает своей простотой и удобством. Например, можно по-честному разделить свое большое приложение на ядро и модули. Или, если сойти с ума, разрешить контент-менеджерам писать простенький код в шаблонах. Можно даже чужой код загрузить издалека и запускать, но это уже чересчур.
Добиться такой изоляции несложно. Достаточно вызвать evalcx(), передав первым параметром код, который нужно выполнить под присмотром. Функция вернет результат выполнения, как обычный eval(). Такой способ подходит, если созданное в результате окружение нас не интересует. Можно, конечно, вернуть из кода глобальный объект и возиться уже с ним. Но это не наш метод.
Для того, чтобы создать изолированное пространство имен, нужно вызвать evalcx() с пустой строкой в качестве первого параметра: evalcx(""). Так мы получим полностью независимое окружение со своим набором глобальных переменных и классов. Полученный таким хитрым способом объект нужно передавать вторым параметром в evalcx(), а впоследствии использовать повторно или с пользой проанализировать.
Если выполнить evalcx('String.abc = 123', {}), то код сможет изменить наш объект String (или любой другой), а этого делать не следует.
Штука хитрая и полезная, но, конечно, не панацея. Так что использовать для запуска чего-то чужого не рекомендую.