javascript函数和javascript对象之间的主要核心区别是什么?

javascript函数和javascript对象之间的主要核心区别是什么?,javascript,Javascript,当您对这两种类型都执行typeof时,您会得到function for functions和object for object,但函数不是都是特殊对象吗?如果是,那么函数与对象的区别是什么属性?可以调用作为一级对象的函数,而其他对象不能调用 有关详细信息,请参阅。可以调用作为一级对象的函数,而其他对象则不能 有关更多详细信息,请参阅 在这两种类型上执行typeof时,函数对应函数,对象对应对象 首先,它基本上只是一个查找表,其中表示如果值是函数对象,则返回字符串函数。因此,它不提供值的实际数据类

当您对这两种类型都执行typeof时,您会得到function for functions和object for object,但函数不是都是特殊对象吗?如果是,那么函数与对象的区别是什么属性?

可以调用作为一级对象的函数,而其他对象不能调用


有关详细信息,请参阅。

可以调用作为一级对象的函数,而其他对象则不能

有关更多详细信息,请参阅

在这两种类型上执行typeof时,函数对应函数,对象对应对象

首先,它基本上只是一个查找表,其中表示如果值是函数对象,则返回字符串函数。因此,它不提供值的实际数据类型,该值将是函数的对象

但是函数不是特别的对象吗

对。函数就是所谓的可调用对象

除正常特性外,对象还具有所谓的。您可以将这些视为某种内部状态,需要对其进行维护以使对象正常工作,但在用户代码中无法访问

其中一些内部属性使某些对象变得特殊,因为并非每个对象都有它们。其中之一是内部属性用双括号表示,其中包含一些特定于实现的格式的代码

调用值(即foo)时,解释器首先检查该值是否为对象,然后检查它是否具有intern[[call]]属性。如果是,则执行存储在该属性中的代码

下面是一个非常粗略的例子,说明了内部的情况:

//模拟函数调用实现,即当 //你知道吗` 函数调用值{ 如果值的类型!==对象{ 抛出新错误“不是对象”; } 如果!值[[[调用]]]{ 抛出新错误“不是函数”; } 调用[return[evalue]; } //具有name normal属性的模拟函数对象 //以及内部属性[[Call]]。 //这将是类似于 //函数func{ //console.log'some code'; // } var func={ 姓名:func,, [[Call]]:console.log'I\\'m a function!';, }; callfunc; 在这两种类型上执行typeof时,函数对应函数,对象对应对象

首先,它基本上只是一个查找表,其中表示如果值是函数对象,则返回字符串函数。因此,它不提供值的实际数据类型,该值将是函数的对象

但是函数不是特别的对象吗

对。函数就是所谓的可调用对象

除正常特性外,对象还具有所谓的。您可以将这些视为某种内部状态,需要对其进行维护以使对象正常工作,但在用户代码中无法访问

其中一些内部属性使某些对象变得特殊,因为并非每个对象都有它们。其中之一是内部属性用双括号表示,其中包含一些特定于实现的格式的代码

调用值(即foo)时,解释器首先检查该值是否为对象,然后检查它是否具有intern[[call]]属性。如果是,则执行存储在该属性中的代码

下面是一个非常粗略的例子,说明了内部的情况:

//模拟函数调用实现,即当 //你知道吗` 函数调用值{ 如果值的类型!==对象{ 抛出新错误“不是对象”; } 如果!值[[[调用]]]{ 抛出新错误“不是函数”; } 返回evalvalue[[[Call]]; } //具有name normal属性的模拟函数对象 //以及内部属性[[Call]]。 //这将是类似于 //函数func{ //console.log'some code'; // } var func={ 姓名:func,, [[Call]]:console.log'I\\'m a function!';, };
callfunc;如果是这样的话,Pal Kerecsenyi,我可以在JS中说,每个函数都是一个对象,但没有一个对象是函数。每个函数都是一个对象,但语句的第二部分并不完全正确。一个函数是一个函数类型的对象。如果是这样的话,我可以在JS中做一个声明,说每个函数都是一个对象,但没有一个对象是函数。每个函数都是一个对象,但声明的第二部分不太正确。函数是函数类型的对象。