将eval()转换为新Function()。

问题描述 投票:0回答:1

给定一个任意的 eval()有什么方法可以将其转换为使用 new Function()而不破坏与任何输入的兼容性(除了范围的变化)?

我能想到的唯一问题是,eval允许多条语句,并返回最后一条语句的结果,而不需要添加一个显式的 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() 在这种情况下?

javascript ecmascript-5
1个回答
1
投票

不,这在 Function(). 该 eval 函数是唯一一个考虑到语句结果的JavaScript功能。


0
投票

new Function()确实可以处理多个语句......但它只能对本地变量和传递到它的变量进行操作......这意味着你只能返回一个结果。

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());
© www.soinside.com 2019 - 2024. All rights reserved.