gpt4 book ai didi

javascript - eval() 和 new Function() 是一回事吗?

转载 作者:IT王子 更新时间:2023-10-29 02:46:12 24 4
gpt4 key购买 nike

这两个函数在幕后做同样的事情吗? (在单语句函数中)

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() 在当前执行范围内将字符串评估为 JavaScript 表达式,并且可以访问局部变量。
  • new Function() 将存储在字符串中的 JavaScript 代码解析为函数对象,然后可以调用该函数对象。它无法访问局部变量,因为代码在单独的范围内运行。

考虑这段代码:

function test1() {
var a = 11;
eval('(a = 22)');
alert(a); // alerts 22
}

如果使用 new Function('return (a = 22);')(),局部变量 a 将保留其值。尽管如此,一些 JavaScript 程序员如 Douglas Crockford 认为 neither should be used除非absolutely necessary ,并且对不受信任的数据评估/使用 Function 构造函数是不安全和不明智的。

关于javascript - eval() 和 new Function() 是一回事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com