Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы объявления функций в JavaScript
В JavaScript существует несколько способов объявления функций, каждый с уникальными характеристиками и применением.
Function Declaration (Объявление функции)
Function Declaration — это классический способ объявления функции с использованием ключевого слова function.
function greet(name) {
return `Привет, ${name}!`;
}
console.log(greet("Мария")); // Привет, Мария!
Ключевые характеристики:
- Hoisting: функция поднимается в верх области видимости и доступна ДО её объявления
- Имеет имя (обязательно)
- Полностью обработана перед выполнением кода
console.log(sayHello()); // "Hello!" — работает!
function sayHello() {
return "Hello!";
}
Function Expression (Функциональное выражение)
Function Expression — функция, присвоенная переменной. Может быть именованной или анонимной.
// Анонимная функция
const add = function(a, b) {
return a + b;
};
// Именованная функция (имя используется только внутри функции)
const multiply = function mul(a, b) {
return a * b;
};
console.log(add(2, 3)); // 5
Ключевые характеристики:
- НЕ hoisting: доступна только после объявления
- Может быть анонимной
- Код более явный и безопасный
console.log(subtract(5, 2)); // ReferenceError: subtract не определена
const subtract = function(a, b) {
return a - b;
};
Arrow Function (Стрелочная функция)
Arrow Function — современный синтаксис ES6 для определения функций.
// Базовый синтаксис
const square = (x) => x * x;
// Без скобок для одного параметра
const double = x => x * 2;
// С несколькими параметрами
const divide = (a, b) => a / b;
// С телом функции
const calculate = (a, b) => {
const sum = a + b;
return sum * 2;
};
Ключевые характеристики:
- Не имеют собственного контекста
this(наследуют из родительской области) - Не имеют
arguments(используй...args) - Не могут быть конструкторами (нельзя использовать
new) - Более компактный синтаксис
const user = {
name: "Иван",
greet: function() {
// this указывает на объект user
console.log(this.name);
},
greetArrow: () => {
// this не указывает на user, это undefined (или window)
console.log(this); // undefined или window
}
};
Generator Function (Функция-генератор)
Generator Function — функция, которая может быть приостановлена и возобновлена.
function* generateNumbers() {
yield 1;
yield 2;
yield 3;
}
const gen = generateNumbers();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
Async Function (Асинхронная функция)
Async Function — функция для работы с асинхронным кодом и промисами.
async function fetchData() {
try {
const response = await fetch("/api/data");
const data = await response.json();
return data;
} catch (error) {
console.error("Ошибка:", error);
}
}
// Async arrow function
const getData = async () => {
const result = await fetch("/api");
return result.json();
};
Сравнение типов
| Характеристика | Declaration | Expression | Arrow | Generator | Async |
|---|---|---|---|---|---|
| Hoisting | Да | Нет | Нет | Нет | Нет |
| Имеет имя | Да | Опционально | Нет | Да | Да |
Свой this | Да | Да | Нет | Да | Да |
| Конструктор | Да | Да | Нет | Нет | Нет |
yield | Нет | Нет | Нет | Да | Нет |
await | Нет | Нет | Да | Да | Да |
Когда использовать
- Function Declaration: для основных функций, когда нужен hoisting
- Function Expression: для коллбэков, когда нужна явность
- Arrow Function: для коротких функций, когда важен контекст родителя
- Generator: для итерирования по значениям
- Async: для асинхронных операций
Выбор типа зависит от контекста и требований вашего кода.