什么'新函数和函数之间的区别

What's the difference between new Function and Function

本文关键字:函数 区别 之间 新函数 什么      更新时间:2024-01-18

使用new Function而不是简单的Function的代码非常常见。我想了解为什么,new操作符到底在做什么。

这两者有什么区别?

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

来自文档:

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

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

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

我从文档中引用的最后一行是说,执行Function()与调用new Function()完全相同。

tl;dr

没有区别。

不同之处在于,当您使用新关键字调用函数时,它会为您的函数创建一个新的"this"空对象,您可以在函数内部设置该对象的属性。此外,如果不返回其他内容,则new调用函数的返回值将为this

没有新的关键字,就没有新的空"this"对象,所以如果你在里面使用它,它会出错。

您可能根本没有在函数中使用this,因此您可能看不到任何差异。

p.s.:一个问题可能是,如果你使用this,并且你在没有newkw的情况下调用。这将是fn中的全局this。-并且在将成为CCD_ 17对象的浏览器环境中。。。所以你将在上面设置道具,而不是在一个新的空对象上。