1

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

提前致谢。

4

0 回答 0