我最近看到了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/