JavaScript扩展eval()函数



我正在尝试用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);

编辑:

这实际上实现了:

function str(cod1,cod2) {
return `
${cod1};
(function(...args) {
${cod2}
})
`
}
function scope1() {
eval(str(
`
var x,
y,
z
`,
`
x = args[0];
y = args[1];
z = args[2];
`
))(1, {test(){return "ing"}}, {ok:"string"})
console.log(x,y.test(),z, "scope1");
}
scope1();
try {
console.log(x, y, z);
} catch(e) {
console.log(e.toString());
}

相关内容

  • 没有找到相关文章

最新更新