代码之家  ›  专栏  ›  技术社区  ›  Gumbo

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

  •  18
  • Gumbo  · 技术社区  · 15 年前

    我最近看到了 presentation about the changes in ECMAScript 5 . 还有一个 slide 谨此声明:

    作用 vs 可调用

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

    作用 可调用

    1 回复  |  直到 15 年前
        1
  •  13
  •   outis    15 年前

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

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