例如,如果我有这个:
var foo = 444;
var x = new Function("console.log('5'); console.log(foo);");
x();
它说foo未定义。我希望能够在new Function
上下文中访问foo和许多其他全局变量。
一个解决方案是:
var foo = 444;
var x = new Function('foo', "console.log('5'); console.log(foo);");
x(foo);
但这需要将所有内容作为单独的参数传递。太麻烦了。
我能想到的唯一选择是让容器对象保存每个变量,然后只传递该容器:
var container = { };
container.foo = 444;
var x = new Function('container', "console.log('5'); console.log(container.foo);");
x(container);
但这需要将我的每个变量都放入容器中。
我不能这样做:
var x = new Function('container', "console.log('5'); console.log(" + foo + ");");
因为我需要在函数执行时评估foo
。不是在声明x
时。
我知道使用new Function
使用eval,它通常是邪恶的。我正在编写代码解析器,并且我正在尝试对其进行优化,因此无论如何我都在使用它。
答案 0 :(得分:-1)
一个简单的解决方案是将变量放在window
window.foo = 444;
window.foo2 = 555;
window.foo3 = 666;
var x = new Function("console.log('5'); console.log(window.foo);");
x();
另一个选择是使用另一个函数为您提供常量值
function globalContainer(){
return {foo: 444, foo1: 555, foo2: 666};
}
var x = new Function("console.log('5'); console.log(globalContainer().foo);");
x();