“新功能()”的目的是什么,特别是作为IIFE?

时间:2014-02-10 20:07:19

标签: javascript

我正在执行一项任务,在我们的构建中删除一些JSHint警告。特别是,我正在摆脱“new Function()”的实例,因为它们是essentially eval statements

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

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

我和我的同事都无法弄清楚究竟应该完成什么。我们能想到的最好的结果是,当它是一个字符串时,它是某种克隆属性的尝试。没有人能够弄清楚为什么它被宣布为IIFE。

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

1 个答案:

答案 0 :(得分: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的所有警告同样适用于此。