Подтвердить что ты не робот

В чем разница между объектом функции и вызываемым объектом?

Недавно я увидел презентацию слайд:

Функция vs Callable

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

Может ли кто-нибудь объяснить мне, какая разница между Function и Callable?

4b9b3361

Ответ 1

Вообще говоря, объект может быть вызван без функции. На языке, где все является объектом (включая функции), вызываемые объекты не должны опускаться из класса Function.

В JS, похоже, что Callable - это все, что имеет внутренний метод [[Call]] (идентифицированный типом "функции", а не "объект" ). Функция (как используется в слайде) является потомком объекта Function. Я мог ошибаться, но в рамках script вы можете создавать только функции, в то время как реализация ECMAScript может определять Callables, которые не являются функциями.

Если вы попробуете фрагмент кода из слайда с анонимными функциями/функциями и с объявленными функциями, результаты будут одинаковыми.

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