需要使用自己的环境变量(无需访问全局变量)在有限范围内执行匿名函数(在客户端上)。 覆盖上下文此不是问题,但对于变量,我只看到一个选项 - 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 ,还有其他方法可以解决吗?
提前致谢。