Различия между Arrow Function, Function Declaration и Function Expression
JavaScript
1
Сообщения
1
Постеры
6
Просмотры
-
1. Function Declaration (Объявление функции)
Синтаксис:
function имяФункции(параметры) { // тело функции }
Пример:
function sayHello(name) { return `Привет, ${name}!`; } console.log(sayHello("Анна")); // Привет, Анна!
Особенности:
- Объявляется с помощью ключевого слова
function
. - Поднимается (hoisted) — можно вызывать до её объявления в коде.
- Имеет своё имя (может быть использовано для рекурсии).
- Создаётся в глобальной области видимости или в области видимости функции, где объявлена.
Пример hoisting:
console.log(greet("Мария")); // Работает! Вывод: Здравствуй, Мария! function greet(name) { return `Здравствуй, ${name}!`; }
2. Function Expression (Функциональное выражение)
Синтаксис:
const имяПеременной = function(параметры) { // тело функции };
Пример:
const sayGoodbye = function(name) { return `Пока, ${name}!`; }; console.log(sayGoodbye("Иван")); // Пока, Иван!
Особенности:
- Функция присваивается переменной.
- Не поднимается полностью — переменная поднимается, но не значение (функция).
- Можно быть анонимной или именованной.
- Часто используется как callback или для передачи функций как аргументов.
Пример с именованной функцией (редко, но возможно):
const factorial = function fact(n) { return n <= 1 ? 1 : n * fact(n - 1); };
Важно:
console.log(add(2, 3)); // Ошибка! Cannot access 'add' before initialization const add = function(a, b) { return a + b; };
️
const
иlet
не поднимаются (или поднимаются, но в "temporal dead zone"), поэтому вызов до объявления — ошибка.
3. Arrow Function (Стрелочная функция)
Синтаксис:
const имя = (параметры) => { // тело функции };
Примеры:
// Однострочная (неявный return) const multiply = (a, b) => a * b; // Многострочная (явный return нужен) const divide = (a, b) => { if (b === 0) return "Ошибка: деление на ноль"; return a / b; }; // Без параметров const greet = () => "Привет, мир!"; // Один параметр — скобки можно опустить const square = x => x * x;
Особенности:
- Нет собственного
this
,arguments
,super
,new.target
. - Не поднимается (как и function expression).
- Не имеет имени (анонимная), но может быть присвоена переменной.
- Лексическое
this
— берётthis
из внешнего контекста. - Не может использоваться как конструктор (
new
вызовет ошибку). - Не имеет
arguments
— используйте...args
.
Различия: Сравнение
Характеристика Function Declaration Function Expression Arrow Function Синтаксис function name() {}
const f = function() {}
const f = () => {}
Hoisting Да (вся функция) Нет (только переменная) Нет this
Собственное (зависит от вызова) Собственное Лексическое (взято извне) arguments
Есть Есть Нет (используйте ...args
)Можно использовать new
Да Да Нет (ошибка) Имя функции Да Может быть (но редко) Нет (анонимная) Подходит для методов объекта Да Да Осторожно (из-за this
)
Пример с
this
— ключевое отличиеconst user = { name: "Алексей", regularFunction: function() { console.log("Привет, я " + this.name); }, arrowFunction: () => { console.log("Привет, я " + this.name); // this — не user! } }; user.regularFunction(); // Привет, я Алексей user.arrowFunction(); // Привет, я undefined (в браузере может быть window.name)
Почему? У стрелочной функции
this
берётся из внешнего контекста, а не из объектаuser
.
Когда что использовать?
Тип функции Когда использовать Function Declaration Когда нужна hoisting, простая именованная функция Function Expression Когда функция — значение (callback, замыкание) Arrow Function Для коротких функций, в map/filter
, когда нужен лексическийthis
Примеры в реальных сценариях
1. Arrow Function в
map
const numbers = [1, 2, 3]; const doubled = numbers.map(n => n * 2); // [2, 4, 6]
2. Function Expression как callback
button.addEventListener('click', function() { console.log('Кнопка нажата'); });
3. Function Declaration — удобно для чтения
function validateEmail(email) { return email.includes("@"); }
Вывод
- Function Declaration — классика, поднимается, удобна для простых функций.
- Function Expression — гибкая, не поднимается, хороша для динамических функций.
- Arrow Function — короткая, лексическое
this
, идеальна для колбэков и однострочных операций.
Выбирайте в зависимости от контекста: нужно ли
this
, нужна ли hoisting, где используется функция. - Объявляется с помощью ключевого слова
-
-
-
-
Как привести строку к массиву
Перенесена JavaScript -
-
-
-
© 2025 eduity.ru, Inc. Все права защищены.