Какое же седьмое строковое значение может вернуть typeof?
typeof function a(){ /* .. */ } === "function"; // true
Легко решить, что function является высокоуровневым встроенным типом в JS, особенно при таком поведении оператора typeof. Тем не менее при чтении спецификации вы увидите, что function на самом деле ближе к «подтипу» object. А именно функция называется там «вызываемым объектом» — то есть объектом с внутренним свойством [[Call]], которое позволяет активизировать его посредством вызова.
Тот факт, что функции в действительности являются объектами, имеет ряд важных следствий. Самое важное — то, что они могут обладать свойствами. Пример:
function a(b,c) {
/* .. */
}
У объекта функции есть свойство length, в котором хранится количество формальных параметров в объявлении этой функции:
a.length; // 2