关于typeof的一些疑问

最近在看到JavaScript类型转换的时候看到一段文字描述(见下图),图中有段文字描述不是特别清楚:关于实现[[call]]的本地对象类型和没有实现[[call]]的本地对象类型,本地对象我了解,但是实现[[call]]没有实现[[call]]又有什么区别。希望知道的大神帮我科普一下。

clipboard.png
]

阅读 2.5k
2 个回答

[[Call]]其实是 ECMAScript 中规定的一个内部属性,同样的属性还包括大家熟知的[[Prototype]],这些内部属性不能够被访问到,但却决定了 JavaScript 中所有对象、属性的表现。
[[Call]]属性在 ECMAScript 规范中被定义为一个方法,这个方法接受两个参数,一个是thisArgument,另一个是argumentsList,即函数this的指向及参数列表,这个属性其实就决定了函数调用时的行为。
因为 JavaScript 中是没有 function 类型的,所有的 function 其实本质上都是 object,所以 typeof 运算符判断一个 object 是不是 function 的依据就是其中是否包含[[Call]]属性。

如果要具体了解 ECMA-262 中关于[[Call]]的定义,可以参考 http://www.ecma-international...

Generally speaking, a function is a "subprogram" that can be called by code external (or internal in the case of recursion) to the function. Like the program itself, a function is composed of a sequence of statements called the function body. Values can be passed to a function, and the function will return a value.

In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object. What distinguishes them from other objects is that functions can be called. In brief, they are Function objects.

MDN介绍function的开头的话,从里面不难看出function就是看能不能call判断的,可以推测实现[[Call]]就是说可以call吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏