Що таке стрілкові функції?
Що таке стрілкова функція
Стрілкова функція - це скорочений синтаксис для оголошення функцій у JavaScript.
Вона записується через стрілку =>.
Приклад:
javascript
// Звичайна функція
function add(a, b) {
return a + b;
}
// Стрілкова функція
const add = (a, b) => a + b;Робить те саме, але коротше і читається як:
"прийми
aіb, поверни їхню суму".
Основні особливості
| Особливість | Опис |
|---|---|
| Короткий синтаксис | Не потрібні ключові слова function, return (якщо 1 вираз) і фігурні дужки. |
Не має власного this | Успадковує this із зовнішньої області (лексично). |
Не має arguments | Якщо потрібні аргументи - використовуй rest-параметри (...args). |
| Не може бути конструктором | Не можна викликати через new. |
Не має prototype | Не підходить для створення класів або методів з прототипом. |
1. Синтаксис стрілкових функцій
Класична коротка форма:
javascript
const double = x => x * 2;Кілька параметрів:
javascript
const add = (a, b) => a + b;Без параметрів:
javascript
const sayHi = () => console.log("Hello!");Тіло з кількома рядками (потрібен return):
javascript
const sum = (a, b) => {
const result = a + b;
return result;
};Повернення об'єкта:
Потрібно обгорнути об'єкт у дужки, інакше {} сприйметься як тіло функції.
javascript
const createUser = (name, age) => ({ name, age });2. Головна відмінність - поведінка this
Стрілкова функція не має свого this.
Вона успадковує this із зовнішнього контексту, в якому була створена.
Приклад зі звичайною функцією:
javascript
function Timer() {
this.seconds = 0;
setInterval(function () {
this.seconds++; // 'this' вказує на window / undefined
}, 1000);
}Приклад зі стрілковою:
javascript
function Timer() {
this.seconds = 0;
setInterval(() => {
this.seconds++; // 'this' вказує на сам об'єкт Timer
}, 1000);
}Стрілка "захоплює" контекст зовнішньої функції, тому this працює очікувано.
3. Де стрілкові функції не підходять
- У методах об'єктів:
javascript
const user = {
name: 'Alex',
sayHi: () => console.log(`Hi, I'm ${this.name}`) // 'this' не вкаже на user!
};
user.sayHi(); // Hi, I'm undefined- У конструкторах:
javascript
const User = (name) => { this.name = name; }; // Помилка
const u = new User('Tim'); // TypeError- Якщо потрібен
arguments:
javascript
const log = () => console.log(arguments); // ReferenceErrorВикористовуй rest:
javascript
const log = (...args) => console.log(args);4. Коли стрілкові функції ідеальні
-
Колбеки (наприклад, у
map,filter,forEach):javascriptconst doubled = [1, 2, 3].map(n => n * 2); -
Асинхронні ланцюжки (
then,catch,finally):javascriptfetch('/api') .then(res => res.json()) .then(data => console.log(data)); -
Вкладені функції, де потрібно зберегти
this:javascriptclass User { constructor(name) { this.name = name; } greetLater() { setTimeout(() => console.log(`Hi, ${this.name}`), 1000); } }
Коротке порівняння
| Властивість | function | => (стрілка) |
|---|---|---|
Має свій this | Так | Ні |
Має arguments | Так | Ні |
Можна викликати через new | Так | Ні |
| Можна використовувати як метод | Так | Не рекомендується |
| Синтаксис | Довший | Короткий, лаконічний |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.