在Python中,eval()和exec()的第二个参数可用于指定在其中运行Python代码的“名称空间”(这是一个模拟Python环境的对象)。如何在JavaScript中做同样的事情?

最佳答案

您不能,但是可以利用Function构造函数来创建隔离范围并阻止访问本地范围。

new Function上的MDN:


  使用Function构造函数创建的函数不会创建闭包
  在其创建上下文中,他们将只能访问自己的
  局部变量和全局变量,而不是范围内的变量
  函数构造函数被调用。


eval上的MDN:


  eval()是一个危险的函数,第三方代码可以看到
  调用eval()的范围,这可能导致
  攻击...


因此,您在哪里:

eval('1 + 2');


您也可以这样做:

new Function('return 1 + 2')();


创建函数时,您可以bind它的任何上下文,例如一个对象:

var data = {
  name: 'Peter'
};

var f = new Function('return "Hello "+ this.name;').bind(data);

f(); //=> "Hello Peter"

关于javascript - 在环境对象中运行JavaScript代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20561422/

10-16 17:30