将 eval() 转换为 new Function()

Converting eval() to new Function()

给定一个任意的 eval(),有没有办法将其转换为使用 new Function(),而不破坏与任何输入的兼容性(范围的变化除外)?

我能想到的唯一问题是 eval 允许多个语句,并且 returns 最后一个的结果,而不必添加显式 return。我想不出用 new Function():

来模拟这个的方法
let code = '4; 5'
> eval(code);
5
> new Function(code)();
undefined
> new Function('return ' + code)();
4
> new Function('return (' + code + ')')();
SyntaxError: Unexpected token ;

在这种情况下,我是否遗漏了什么或者 eval()new Function() 不兼容?

不,Function()确实不可能。 eval 函数是唯一考虑语句结果的 JavaScript 功能。

new Function() 确实可以处理多个语句...但它只能对传递给它的局部变量和变量进行操作..这意味着您只能 return 一个结果。

var outerVar1 = 2;
var outerVar2 = 3;
var newFunc = new Function('a1','a2', 'var result = a1 * a2; return(result);');
console.log('Result = ' + newFunc(outerVar1, outerVar2));

以上有效...以下无效...至少在大多数引擎中...

var outerVar1 = 2;
var outerVar2 = 3;
var newFunc = new Function('var result = outerVar1 * outerVar2; return(result);');
console.log('Result = ' + newFunc());