新的 Function 和 Function 之间有什么区别?

6

经常看到代码中使用new Function,而不是简单地使用Function。我想了解为什么,new运算符在这里到底做了什么。

这两者有什么区别?

var y = new Function("a", "alert(a)")
var x = Function("a", "alert(a)")

1
在这种情况下没有区别。 - elclanrs
那么,不考虑这种情况,还有什么情况会有差异呢? - GBarroso
2
Function 没有区别。它被定义为以相同的方式运行。 "Function 被作为函数而不是构造函数调用时,它会创建并初始化一个新的 Function 对象。" - Jonathan Lonowski
字符串和数字基本上是,...布尔值 - elclanrs
2
这是一种在某些构造函数中使用的技术,如果没有使用new(即this是全局对象),则会自我调用为构造函数。 - Arun P Johny
显示剩余2条评论
2个回答

6
文档 中可以看到:

Function 构造函数创建一个新的 Function 对象。在 JavaScript 中,每个函数实际上都是一个 Function 对象。

...

调用 Function 构造函数作为函数(而不使用 new 运算符)与调用它作为构造函数具有相同的效果。

由于在 Javascript 中函数实际上是对象,因此可以通过标准调用语法和 new 运算符(在这种情况下实例化新的 Function 类型的对象)来调用它们。

从文档中引用的最后一行所说的是,执行 Function() 和执行 new Function()相同的.

总之

没有区别。


1
这么基础的东西怎么没有无数个赞呢。 - Cameron Wilby

1
区别在于,当您使用new关键字调用函数时,它会为该函数创建一个新的“this”空对象,并且您可以在函数内部设置该对象上的属性。此外,如果您没有返回其他内容,则从新调用的函数中返回值将为this。
如果没有new关键字,则没有新的空' this'对象,因此如果您在其中使用它,它将出错。
您可能根本不使用this,在您的函数中,因此您可能根本看不到任何差异。
注:一个问题可能是,如果您在不使用new关键字的情况下使用this,则此将是fn内部的全局this。 - 在浏览器环境中,这将是window对象...因此您将在其上设置属性而不是在普通的新空对象上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接