JavaScript新函数表达式和新函数构造函数

JavaScript新函数表达式和新函数构造函数,javascript,function,constructor,new-operator,Javascript,Function,Constructor,New Operator,我的问题是关于使用newfunction(){…}overnewfunction()生成的对象 我目前的理解/假设 当我们使用function()或new function()创建函数时,会得到一个配置为函数的对象(它的内部插槽表示函数类型对象) 无论是否使用新运算符,Function()构造函数都会返回一个新的函数对象 使用函数表达式返回内部使用function()构造函数的函数对象 函数表达式通过解析函数体提供优化 我的问题 按照我上面的假设,为什么newfunction()和新函数()

我的问题是关于使用
newfunction(){…}
over
newfunction()生成的对象

我目前的理解/假设

  • 当我们使用function()或new function()创建函数时,会得到一个配置为函数的对象(它的内部插槽表示函数类型对象)
  • 无论是否使用新运算符,Function()构造函数都会返回一个新的函数对象
  • 使用函数表达式返回内部使用function()构造函数的函数对象
  • 函数表达式通过解析函数体提供优化
我的问题

按照我上面的假设,为什么
newfunction()
新函数(){…}
返回不同的内容

第一个返回函数对象,但后一个返回标准对象。既然引擎盖下的函数表达式使用function()构造函数,为什么后者的行为与
new function()不同

使用
new function(){…}
我希望是一个函数对象,而不是标准对象。

new function(…)返回一个新的函数,而new function(){…}返回一个新的对象

基本上,函数只是计算一段代码的一种方法

对象是用javascript存储数据的一种方式

旁注:技术上你可以做到

new (new Function(...))

wich返回一个新对象。

以下几行基本相同:

function foo(...) {...}
var foo = function (...) {...};
var foo = new Function (...);
它们都在当前范围内声明一个新函数(该函数是一个对象,即继承
对象
原型的
函数的实例,…),可通过
foo
变量访问该函数

new
关键字从一个函数实例化一个对象,该函数允许您在标准OOP语言中创建类似于类实例的东西

继续上面的示例:

var bar = new foo(...)
将在当前范围内实例化
foo
函数的实例,该函数可通过
bar
变量访问

为什么
newfunction()
新函数(){…}
返回不同的内容


我将稍微改写一下这个例子。而不是:

new Function()
//and
new function(){ ... }
我要用

new Function()
//and
var foo = function () { ... };
new foo();

new Function()
返回与
new foo()
不同的东西的原因完全是因为
Function
是与
foo
不同的函数

我希望您不会被以下事实所迷惑:
newobject()
返回的对象与
newarray()具有不同的特性。同样的事情正在这里发生

既然引擎盖下的函数表达式使用了
function()
构造函数,为什么后者的行为与
new function()不同

在引擎盖下,后面的表达式基本上是:

new (new Function ( ... ))
function(){}==newfunction()
newfunction(){}==newnewfunction()