我最近看到了有关 ECMAScript 5 更改的演示文稿。这张幻灯片上有一张幻灯片:
函数与可调用
typeof f === 'function' // → f is Callable ({}).toString.call(f) === '[object Function]' // → f is a Function
谁能向我解释Function和Callable之间的区别是什么?
我最近看到了有关 ECMAScript 5 更改的演示文稿。这张幻灯片上有一张幻灯片:
函数与可调用
typeof f === 'function' // → f is Callable ({}).toString.call(f) === '[object Function]' // → f is a Function
谁能向我解释Function和Callable之间的区别是什么?
一般来说,一个对象可以被调用而不是一个函数。在一切都是对象(包括函数)的语言中,可调用对象不必来自 Function 类。
在 JS 中,看起来 Callable 是任何具有内部 [[Call]] 方法的东西(由 'function' 的 typeof 标识,而不是 'object')。函数(如幻灯片中所用)是函数对象的后代。我可能是错的,但是在脚本中您只能创建函数,而 ECMAScript 实现可以定义不是函数的 Callables。
如果您尝试使用匿名函数/函数表达式和声明函数的幻灯片中的代码片段,结果是相同的。
typeof function() {}; // == 'function'
({}).toString.call(function() {}) // == '[object Function]'
function foo() {}
typeof foo; // == 'function'
({}).toString.call(foo) // == '[object Function]'