探索 eval() 和 new Function() 之间的区别
在 JavaScript 中,eval() 和 new Function() 经常被比较了解它们的相似点和不同点。本文检查它们是否执行相同的任务,并提供其不同行为的详细说明。
代码示例
考虑以下代码片段:
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'));
在此代码中,evaluate() 使用 eval() 将字符串作为 JavaScript 表达式进行计算,而 func() 使用 new Function() 构造函数从字符串创建函数对象并立即执行它。
独特的功能
虽然这两个函数都评估字符串,但它们不执行相同的任务。以下是主要区别:
eval():
new Function():
突出差异的示例
考虑以下代码:
function test1() { var a = 11; eval('(a = 22)'); alert(a); // alerts 22 }
如果使用 new Function('return (a = 22);')() 而不是 eval () 时,局部变量 a 将保留其原始值,因为 new Function() 不会访问周围范围内的局部变量。
建议和安全注意事项
一些JavaScript 开发人员(例如 Douglas Crockford)主张除非绝对必要,否则不要使用 eval() 和 new Function()。此建议源于安全问题,因为使用任一函数评估不受信任的数据都可能存在风险。
因此,通常建议在求助于 eval() 或 new Function( ).
以上是Eval() 与 New Function():它们真的做同样的事情吗?的详细内容。更多信息请关注PHP中文网其他相关文章!