首页  >  文章  >  web前端  >  Eval() 与 New Function():它们真的做同样的事情吗?

Eval() 与 New Function():它们真的做同样的事情吗?

Barbara Streisand
Barbara Streisand原创
2024-11-03 00:11:29330浏览

Eval() vs. New Function(): Do They Really Do the Same Thing?

探索 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():

    • 在当前范围内将字符串计算为 JavaScript 表达式。
    • 可以访问周围代码块中定义的局部变量。
  • 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn