有没有办法使用纯JavaScript来执行以下操作?
var x = 12;
var subGlobal = {};
evalInGlobal(subGlobal, "x = 100;");
console.log(x); //--> 12
console.log(subGlobal.x); //--> 100
理由是我想在隔离的环境中运行脚本,因此每个脚本都可以引用
x
,但x
是不同的(例如)。 最佳答案
我最近能得到的是这个。它需要预先初始化global
中使用的code
变量集。
var evalInGlobal = function(global, code) {
global.x = null; // this is necessary
with(global) {
eval(code);
};
};
var x = 12;
var subGlobal = {};
evalInGlobal(subGlobal, "x = 100;");
console.log(x); //--> 12
console.log(subGlobal.x); //--> 100
为了摆脱初始化,我认为您必须将代码块转换为可识别作用域的东西。例如,将
x = 100;
转换为function(ctx) { ctx.x = 100; }
并通过调用fn(global)
来调用它。这类似于AngularJS构建their parser以允许针对给定范围评估表达式(JS的一小部分)的方式。
关于javascript - 使用其他对象作为全局值来评估字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18771543/