这两个函数在幕后做同样的事情吗? (在单语句函数中)
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'));
不,是他们not相同。
-
eval()
将字符串计算为当前执行范围内的 JavaScript 表达式,并且可以访问局部变量。
-
new Function()
将存储在字符串中的 JavaScript 代码解析为函数对象,然后可以调用该函数对象。它无法访问局部变量,因为代码在单独的作用域中运行。
考虑这段代码:
function test1() {
var a = 11;
eval('(a = 22)');
alert(a); // alerts 22
}
If new Function('return (a = 22);')()
被使用,局部变量a
将保留其价值。尽管如此,一些 JavaScript 程序员(例如 Douglas Crockford)认为 unless 绝对有必要 https://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil,并评估/使用Function
在不受信任的数据上使用构造函数是不安全且不明智的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)