Какого типа данных функция?

👨‍💻 Frontend Developer 🔴 Редко спрашивают 🎚️ Легкий
#JavaScript #Функции #База JS

Краткий ответ

В JavaScript функция имеет тип “function”. Оператор [typeof] для функции возвращает строку [“function”], что делает функции особым типом данных, отличным от объектов, чисел, строк и других типов.

function myFunc() {
  return 'привет';
}
 
console.log(typeof myFunc); // 'function'
console.log(typeof function() {}); // 'function'

Полный ответ

Функция в JavaScript — это особый тип данных, который можно “трогать руками”, передавать как подарочную коробку, которую можно открыть (вызвать) в любой момент! 🎁

Какой тип у функции

Функции в JavaScript имеют специальный тип [“function”], который отличает их от всех других типов данных:

Простые примеры

Проверка типа функции

function greet() {
  return 'Привет!';
}
 
const arrowFunc = () => 'Привет!';
 
const obj = {
  method() { return 'Привет!'; }
};
 
console.log(typeof greet);        // 'function'
console.log(typeof arrowFunc);    // 'function'
console.log(typeof obj.method);   // 'function'

Функция как значение

// Функция может быть значением переменной
const myFunction = function() {
  return 'результат';
};
 
console.log(typeof myFunction); // 'function'
 
// Функция может быть передана как аргумент
function execute(func) {
  return func();
}
 
execute(myFunction); // 'результат'

Особенности типа “function”

Наследование от Object

function myFunc() {}
 
// Функция — это объект!
console.log(myFunc instanceof Object); // true
console.log(typeof myFunc);            // 'function'
 
// У функции могут быть свойства
myFunc.customProperty = 'значение';
console.log(myFunc.customProperty);    // 'значение'

Функция как объект первого класса

// Функцию можно:
// 1. Присвоить переменной
const func1 = function() {};
 
// 2. Передать как аргумент
function callFunc(fn) { fn(); }
 
// 3. Вернуть из другой функции
function createFunc() {
  return function() { return 'создано'; };
}
 
// 4. Хранить в массиве
const funcs = [function() { return 1; }, function() { return 2; }];

Когда это важно знать

Проверка типа при разработке

function processData(data, callback) {
  // Проверяем, что callback — функция
  if (typeof callback === 'function') {
    return callback(data);
  }
  throw new Error('Callback должен быть функцией');
}

Работа с API

function apiCall(url, successCallback, errorCallback) {
  if (typeof successCallback !== 'function') {
    throw new Error('successCallback должен быть функцией');
  }
  
  if (typeof errorCallback !== 'function') {
    throw new Error('errorCallback должен быть функцией');
  }
  
  // ... логика API вызова
}

Частые ошибки

Путаница с объектами

// ❌ Ошибка — думать, что функция это обычный объект
const obj = {};
const func = function() {};
 
console.log(typeof obj);   // 'object'
console.log(typeof func);  // 'function' (особый тип!)

Забыть проверку типа

// ❌ Ошибка — не проверить тип
function bad(data, callback) {
  return callback(data); // Может быть ошибка, если callback не функция
}
 
// ✅ Правильно — проверить тип
function good(data, callback) {
  if (typeof callback === 'function') {
    return callback(data);
  }
  return data;
}

Простые правила

  1. typeof function — всегда возвращает [“function”] 🎯
  2. Особый тип — функция имеет свой собственный тип данных ✨
  3. Наследование — функция наследуется от Object, но остается функцией ⚠️
  4. Гражданин первого класса — функцию можно передавать как любое другое значение 📦
  5. Проверка — всегда проверяйте тип при работе с функциями как значениями ✅

Понимание типа функции помогает правильно работать с функциями как со значениями и избегать ошибок при передаче их в качестве аргументов! 💪


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪