最近在看到JavaScript类型转换的时候看到一段文字描述(见下图),图中有段文字描述不是特别清楚:关于实现[[call]]的本地对象类型和没有实现[[call]]的本地对象类型,本地对象我了解,但是实现[[call]]
和没有实现[[call]]
又有什么区别。希望知道的大神帮我科普一下。
]
最近在看到JavaScript类型转换的时候看到一段文字描述(见下图),图中有段文字描述不是特别清楚:关于实现[[call]]的本地对象类型和没有实现[[call]]的本地对象类型,本地对象我了解,但是实现[[call]]
和没有实现[[call]]
又有什么区别。希望知道的大神帮我科普一下。
]
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吧。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
[[Call]]
其实是 ECMAScript 中规定的一个内部属性,同样的属性还包括大家熟知的[[Prototype]]
,这些内部属性不能够被访问到,但却决定了 JavaScript 中所有对象、属性的表现。[[Call]]
属性在 ECMAScript 规范中被定义为一个方法,这个方法接受两个参数,一个是thisArgument
,另一个是argumentsList
,即函数this
的指向及参数列表,这个属性其实就决定了函数调用时的行为。因为 JavaScript 中是没有 function 类型的,所有的 function 其实本质上都是 object,所以 typeof 运算符判断一个 object 是不是 function 的依据就是其中是否包含
[[Call]]
属性。如果要具体了解 ECMA-262 中关于
[[Call]]
的定义,可以参考 http://www.ecma-international...