这两个功能在后台执行相同的操作吗?(在单条语句中)
var evaluate = function(string) { return eval('(' + string + ')'); } var func = function(string) { return (new Function( 'return (' + string + ')' )()); } console.log(evaluate('2 + 1')); console.log(func('2 + 1'));
不,他们 不 一样。
eval()
new Function()
考虑以下代码:
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
如果new Function('return (a = 22);')()使用,则局部变量a将保留其值。但是,诸如Douglas Crockford之类的一些JavaScript程序员认为,除非绝对必要,否则都不应该使用它们,并且对不可信数据进行逃避/使用构造函数是不安全且不明智的。Function
new Function('return (a = 22);')()
a
Function