我正在尝试使用JavaScript制作自己的eval函数,该函数将在周围的上下文中执行一个字符串,例如eval,并添加一些其他内容。
因此,通常,在这样做时:
eval("var foo = 8");
foo; // === 8
没问题;但是,当我想用自己的函数扩展eval
时,如下所示:
function myEval(str) {
return eval(str);
}
myEval("var foo = 8");
foo; //error, "foo" is not defined etc.....
显而易见的原因是,在myEval中,调用的eval函数仅在该函数的作用域内执行,而不在周围的作用域内执行。
我想知道是否有可能在其周围函数的作用域内执行eval,以扩展JavaScript函数eval?
弄清楚了,只需将eval函数包装在另一个函数中,然后在周围的范围内调用该另一个函数,如下所示:
function g(str) {
return {
eval,
go(){
this.eval(`
//some other cool stuff
let test = 1000;
${this.str}
`)
},
str
}
}
g("var pp = 3 * test").go()
console.log(pp);