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

Какой синтаксис у функции?

2.3 Middle🔥 201 комментариев
#JavaScript Core

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

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

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

Синтаксис объявления функции

Синтаксис функции в JavaScript — это формальный способ описания её структуры. Основные способы объявления:

1. Function Declaration (Декларация функции)

Наиболее классический способ. Функция объявляется с помощью ключевого слова function.

function functionName(parameters) {
    // тело функции
    return value; // опционально
}

Особенности:

  • Поднимается (hoisted) — можно вызывать до объявления.
  • Имеет собственный контекст this.
  • Часто используется для основных, именованных блоков кода.
sayHello(); // Работает благодаря hoisting!

function sayHello() {
    console.log("Привет!");
}

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

Функция создаётся внутри выражения, часто при присваивании переменной.

const functionName = function(parameters) {
    // тело функции
    return value;
};

Особенности:

  • Не поднимается — вызов до присваивания вызовет ошибку.
  • Может быть анонимной (без имени после function) или именованной.
  • Широко используется для колбэков и условного создания функций.
// Анонимное функциональное выражение
const sum = function(a, b) {
    return a + b;
};

// Именованное функциональное выражение (полезно для отладки)
const factorial = function calc(n) {
    if (n <= 1) return 1;
    return n * calc(n - 1); // имя calc доступно внутри функции
};

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

Современный лаконичный синтаксис, введённый в ES6.

const functionName = (parameters) => {
    // тело функции
    return value;
};

Ключевые особенности и сокращения:

  • Неявный возврат: Если тело состоит из одного выражения, фигурные скобки и return можно опустить.
    const double = x => x * 2; // Автоматически возвращает x * 2
    
  • Синтаксис для одного параметра: Круглые скобки можно опустить.
    const greet = name => `Hello, ${name}`;
    
  • Возврат объекта: Чтобы вернуть объект при неявном возврате, его нужно обернуть в круглые скобки.
    const createUser = (id, name) => ({ id: id, name: name });
    
  • Нет собственного this, arguments, super: this захватывается из окружающего контекста (лексически), что делает стрелочные функции идеальными для колбэков, особенно в методах класса или обработчиках событий, где нужно сохранить контекст.
    class Timer {
        constructor() {
            this.seconds = 0;
            // Здесь стрелочная функция сохраняет контекст this экземпляра Timer
            setInterval(() => {
                this.seconds++;
                console.log(this.seconds);
            }, 1000);
        }
    }
    

4. Параметры и аргументы

  • Параметры по умолчанию (ES6): Можно задавать значения по умолчанию.
    function greet(name = 'Гость', greeting = 'Привет') {
        return `${greeting}, ${name}!`;
    }
    
  • Остаточные параметры (Rest parameters, ES6): Собирают все переданные аргументы в массив.
    function sumAll(...numbers) {
        return numbers.reduce((acc, num) => acc + num, 0);
    }
    
  • Псевдомассив arguments: Доступен внутри обычных функций (кроме стрелочных), содержит все переданные аргументы.

Краткое сравнение синтаксисов

ОсобенностьFunction DeclarationFunction ExpressionArrow Function
Поднятие (Hoisting)Полное (можно вызвать до)Нет (только объявление var)Нет
Имя функцииОбязательноЧасто анонимноВсегда анонимна
Контекст thisДинамическийДинамическийЛексический (заимствованный)
Наличие argumentsДаДаНет
Использование как методДаДаДа (но осторожно с this)
Использование как конструкторДаДаНет (вызовет ошибку)

Выбор синтаксиса на практике

  • Function Declaration — для основных, самостоятельных функций, особенно если важна читаемость и поднятие.
  • Function Expression — когда нужна большая гибкость: присваивание в зависимости от условий, передача в качестве аргумента, создание замыканий.
  • Arrow Function — идеальны для коротких колбэков, методов массивов (map, filter, reduce), и всех случаев, где нужно сохранить лексический контекст this. Их лаконичный синтаксис делает код чище.

Понимание нюансов каждого синтаксиса позволяет писать более предсказуемый, эффективный и современный JavaScript-код, выбирая оптимальный инструмент для конкретной задачи.