在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/