如何在新的Function上下文中访问全局变量?

时间:2016-07-20 04:11:44

标签: javascript function global-variables eval

例如,如果我有这个:

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,它通常是邪恶的。我正在编写代码解析器,并且我正在尝试对其进行优化,因此无论如何我都在使用它。

1 个答案:

答案 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();