动态变量,范围,沙箱?

时间:2014-08-16 23:31:55

标签: javascript scope sandbox dynamic-variables

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

提前致谢。

0 个答案:

没有答案