"new Function"如何计算一串数字符号并产生结果?这种类型的函数声明通常如何工作?



let calc = '41+9-(30/2)*2';
let getResult = new Function(`return ${calc}`);
let omg = getResult();
console.log(omg); //20

我真的不明白它是怎么工作的。是的,我知道有了这样的声明,函数只能访问全局变量。据我所知,这样的函数可以将任何字符串转换为代码。那么它是不是类似于">eval"?计算字符串并将其转换为数字类型的结果的机制是什么?

如果有人帮我解决这个问题,我会非常感激

以下代码之所以有效,是因为我们已经处于全局上下文中:

const x = 'foo'
const f = new Function(`return x`)
const result = f()
console.log(result) // 'foo'

以下代码不起作用,因为我们不在全局上下文中:

(function () {
const x = 'foo'
const f = new Function(`return x`)
const result = f()
console.log(result) // ReferenceError: x is not defined
}())

但是,您的代码完全不同。字符串x被替换为模板文字,然后将完成的字符串提供给Function构造函数。因此函数体不会在x上闭合。函数体实际上是return 41+9-(30/2)*2,对其进行求值并返回结果。

因此,无论上下文如何,您的代码都可以工作:

(function() {
const x = '41+9-(30/2)*2'
const f = new Function(`return ${x}`)
const result = f()
console.log(result) //20
}())

相关内容

  • 没有找到相关文章

最新更新