javascript - 函数对象和可调用对象有什么区别?

标签 javascript function callable

我最近看到了presentation about the changes in ECMAScript 5。并带有以下语句的slide:

Function vs Callable

typeof f === 'function'                       // → f is Callable
({}).toString.call(f) === '[object Function]' // → f is a Function


谁能向我解释Function和Callable之间的区别是什么?

最佳答案

一般来说,对象可以是可调用的,而不是函数。在一切都是对象(包括函数)的语言中,可调用对象不必来自Function类。

在JS中,Callable看起来像是具有内部[[Call]]方法(由“功能”的类型标识,而不是“对象”的类型)的任何东西。 Function(如幻灯片中使用的)是Function对象的后代。我可能是错的,但是在脚本中您只能创建函数,而ECMAScript实现可以定义不是函数的可调用对象。

如果您尝试同时使用匿名函数/函数表达式和声明的函数的幻灯片中的代码片段,则结果是相同的。

typeof function() {}; // == 'function'
({}).toString.call(function() {}) // == '[object Function]'
function foo() {}
typeof foo; // == 'function'
({}).toString.call(foo) // == '[object Function]'

关于javascript - 函数对象和可调用对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897103/

相关文章:

javascript - HTML localStorage 返回 Null

java - 多线程 Java 仅使用一个线程

types - 在 Julia 中,您可以指定可调用函数参数的参数和返回值吗?

javascript - 在一定高度后固定滚动 div,然后在到达其他 div 后停止?

Python - 如何将一系列用户输入放入函数中

c++ - 在c++中,虚函数、函数覆盖和多态性是否相互关联?

java - 线程创建和同步所需的时间

javascript - 如何将 Angular 数组数据发送到 Controller ?

javascript - 有没有一种更简洁的方法可以将方法绑定(bind)到 Javascript 中的对象?

javascript - 音频元素 “currentTime”在Android 6设备上不起作用