需要使用自己的环境变量(无法访问全局变量)在有限范围内执行匿名函数(在客户端)。覆盖上下文这不是问题,但是对于变量,我只看到一个选项- eval。但是由于 eval 应该被留到边缘,我决定询问社区是否有其他解决方案。
其实问题:
function sandbox(fn){ // with eval
fn = fn.toString();
// need to dynamically create variables inside fn
fn = '(function(){"use strict"; var window, document; (' + fn + ').call(this);}) ';
fn = eval(fn);
fn.call({}); // example
}
sandbox(function(){
console.log(window, document, this); // return undefined, undefined, Object {}
});
对于变量的重新定义,必须响应函数sandbox()。我的意思是在函数中明确重新定义变量的那个不会被传递给提供。用自己的环境动态创建框架,以及将可变参数传递给函数
(function(window, document){...})(null, null)
也不适合它,所以一切都很清楚,这里需要通过sandbox()对该过程进行动态化。不使用eval还有其他方法可以解决吗?
提前致谢。