Javascript 函数对象和可调用对象之间的区别是什么?

Javascript 函数对象和可调用对象之间的区别是什么?,javascript,function,callable,Javascript,Function,Callable,我最近看了电影。这句话有一个共同点: 函数vs可调用 有人能给我解释一下函数和可调用之间的区别吗?一般来说,一个对象不需要函数就可以被调用。在一切都是对象(包括函数)的语言中,可调用对象不必从函数类派生 在JS中,可调用的是任何具有内部[[Call]]方法(由“function”类型标识,而不是“object”)的东西。函数(在幻灯片中使用)是函数对象的后代。我可能错了,但在脚本中,您只能创建函数,而ECMAScript实现可以定义非函数的可调用项 如果您使用匿名函数/函数表达式和声明的函数尝试

我最近看了电影。这句话有一个共同点:

函数vs可调用


有人能给我解释一下函数和可调用之间的区别吗?

一般来说,一个对象不需要函数就可以被调用。在一切都是对象(包括函数)的语言中,可调用对象不必从函数类派生

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

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

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

为了启发outis的反应,这里讨论了它是如何产生的:进一步的信息:(function(){}).constructor; // → 函数原型({}).constructor; // → 对象prototype@FranCorpier这种联系很糟糕。你能更新一下吗?看起来这可能是一场有趣的讨论。@Icode4food:该票证似乎不再存在于该网站上,但回程机器将其存档:该链接已断开,工具链接已断开。
typeof function() {}; // == 'function'
({}).toString.call(function() {}) // == '[object Function]'
function foo() {}
typeof foo; // == 'function'
({}).toString.call(foo) // == '[object Function]'