← Назад к вопросам

Какие знаешь типы функций?

1.0 Junior🔥 221 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какие знаешь типы функций?

В JavaScript существует несколько типов функций с разными характеристиками и способами использования. Каждый тип имеет свои особенности и применяется в разных ситуациях.

1. Объявленные функции (Function Declaration)

Традиционный способ создания функции с ключевым словом function:

function greet(name) {

return 'Hello, ' + name;

}

Особенности: hoisting позволяет вызывать функцию до её объявления в коде. Функция существует во всей области видимости с самого начала выполнения.

2. Функциональные выражения (Function Expression)

Функция присваивается переменной. Может быть именованной или анонимной:

const greet = function(name) {

return 'Hello, ' + name;

};

const add = function namedFunction(a, b) {

return a + b;

};

Особенности: нет hoisting, функция существует только после присваивания. Анонимные функции часто используются как callback.

3. Стрелочные функции (Arrow Functions)

Появились в ES6 с синтаксисом стрелки =>:

const greet = (name) => 'Hello, ' + name;
const add = (a, b) => a + b;
const greet2 = name => 'Hello, ' + name;

Особенности: нет своего this контекста, используют this из родительской области. Компактный синтаксис для простых функций. Если тело в одну строку return не нужен. Нет hoisting.

4. Методы объекта (Object Methods)

Функции которые являются свойствами объекта:

const user = {

name: 'John', greet: function() {

    return 'Hello, ' + this.name;

}, greet2() {

    return 'Hi, ' + this.name;

}

};

Особенности: имеют доступ к this который ссылается на объект. Можно использовать shorthand нотацию.

5. Конструкторы (Constructor Functions)

Функции которые используются с new для создания объектов:

function User(name, age) {

this.name = name; this.age = age;

}

const john = new User('John', 30);

Особенности: с new создается новый объект и this ссылается на него. Обычно именуются с заглавной буквы. Сегодня используются классы вместо них.

6. Классовые методы (Class Methods)

Методы определены в классе:

class User {

constructor(name) {

    this.name = name;

}

greet() {

    return 'Hello, ' + this.name;

}

}

Особенности: синтаксический сахар над функциями-конструкторами. Есть this контекст. Можно использовать static методы.

7. Асинхронные функции (Async Functions)

Функции которые работают с Promise и await:

async function fetchData(url) {

const response = await fetch(url); const data = await response.json(); return data;

}

Особенности: всегда возвращают Promise. Можно использовать await для ожидания Promise. Обработка ошибок через try catch.

8. Генератор функции (Generator Functions)

Функции которые могут приостанавливаться и возобновляться:

function* counter() { yield 1; yield 2; yield 3;

}

Особенности: используется * и yield. Возвращает итератор. Полезны для создания последовательностей и ленивых вычислений.

9. Callback функции

Функции передаваемые как аргументы другим функциям:

function fetchData(url, callback) {

fetch(url)

    .then(response => response.json())
    .then(data => callback(data))
    .catch(error => callback(null, error));
}

Особенности: вызываются из другой функции. Часто используются для асинхронных операций. Могут привести к callback hell.

10. Чистые функции (Pure Functions)

Функции которые не имеют побочных эффектов и возвращают одинаковый результат для одинаковых входных данных:

function add(a, b) {

return a + b;

}

function not_pure(array) {

array.push(1); // Модифицирует входной массив return array;

}

Особенности: предсказуемы, легко тестировать, нет зависимостей от внешнего состояния. Рекомендуются в функциональном программировании.

11. Высшего порядка функции (Higher Order Functions)

Функции которые принимают другие функции как аргументы или возвращают функции:

function map(array, fn) {

return array.map(fn);

}

function multiply(n) {

return function(x) {

    return x * n;

};

}

const double = multiply(2);
const result = double(5);  // 10

Особенности: позволяют абстрагировать логику. Используются в функциональном программировании.

Выводы

Каждый тип функции имеет своё применение. Declaration и Expression для обычных функций. Arrow функции для callback и кратких функций. Классовые методы для ООП кода. Async функции для асинхронных операций. Генераторы для последовательностей. Чистые функции для надёжного кода. Выбор типа зависит от контекста и требований проекта.