“new Function()”的目的是什么,特别是作为 IIFE?

问题描述 投票:0回答:1

我正在执行一项任务,以删除我们构建中的一些 JSHint 警告。特别是,我正在摆脱“

new Function()
”的实例,因为它们本质上是
eval
声明

我在代码中遇到了一个奇怪的模式,我不理解它,并且在知道它的作用之前不愿意更改。这是一个例子:

if(typeof(someObj.someProperty) === "string"){
someObj.someProperty = new Function("return " + someObj.someProperty + " ;")();
}

我和我的同事都无法弄清楚这到底要实现什么。我们能想到的最好的办法是,当它是字符串时,它是克隆属性的某种尝试。没有人能弄清楚为什么它被宣布为 IIFE。

这是其他人见过的模式吗?如果它是一个克隆,那么对于字符串来说还重要吗,因为它们是不可变的?

javascript iife
1个回答
1
投票

看起来有人听说他们不应该使用

eval
,并决定遵循该建议的文字而不是其精神。换句话说,它或多或少相当于:

if (typeof(someObj.someProperty) === "string") {
    someObj.someProperty = eval(someObj.someProperty);
}

准确来说,完全等价于:

if (typeof(someObj.someProperty) === "string") {
    someObj.someProperty = eval("(function () { return " + someObj.someProperty + "; })")();
}

这仍然很不安全,所有针对

eval
的警告同样适用于此。

© www.soinside.com 2019 - 2024. All rights reserved.