将 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());
给定一个任意的 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());