如何在新的Function上下文中访问全局变量
How to access global variables within a new Function context?
例如,如果我有这个:
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 + ");");
因为我需要在函数执行时评估CCD_ 2。声明x
时不会。
我知道使用new Function
使用eval,这通常是邪恶的。我正在编写一个代码解析器,并试图对其进行优化,所以我无论如何都在使用它。
一个简单的解决方案是将变量放在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();
相关文章:
- 如何访问UIWebView'的子窗口上下文
- 访问函数对象的上下文属性|如何
- HTML5上下文菜单-当菜单项被点击时,访问最初被点击的元素
- 访问流星模板中的父数据上下文
- 如何使用子上下文可访问的自定义属性扩展模板绑定语法
- 可以't访问上下文.带有react路由器redux的路由器
- 访问主干模型中的父上下文
- requireJS 中其他上下文的访问模块
- 如何从子上下文访问类属性
- 如何从上下文菜单访问IE11中的选定文本,并复制到剪贴板
- 从铁路由器访问模板中的数据上下文数据时出现问题
- SharePoint - 显示模板 - 访问客户端上下文对象
- 调用 ES6 方法时的绑定上下文.如何从称为回调的方法中访问对象
- 无法在 window.resize() 中访问对象的上下文
- 如何在右键单击链接并从上下文菜单访问功能后获取链接的 DOM
- 如何访问页面's脚本上下文
- 访问Meteor中Template渲染函数中的父数据上下文
- 访问当前Knockout绑定上下文
- 车把 - 是否可以在部分访问父上下文
- Handlebars模板,使用字符串键访问上下文变量