Коротка відповідь
juniorArrow function — це синтаксис, що об’єднує лямбда-вираз і автоматичне прив’язування this. Вона не має власного this, arguments, super або new.target, тому підходить для колбеків. Приклад: const add = (a,b)=>a+b;
Повне пояснення
Що це і навіщо
Arrow function (стрілкова функція) — коротка форма оголошення функцій у JavaScript/TypeScript, що забезпечує лексичне this і не створює власного контексту виконання. Використовується переважно в колбеках, реактивних підписах та однострочних обчисленнях.
Ключові принципи/терміни
- Лексичне
this: значення береться з оточуючого блоку. - Немає власного
arguments,super,new.target. - Підтримує implicit return для однострочних виразів.
Як це працює
При створенні arrow function компілятор генерує функцію, яка захоплює this з зовнішнього контексту. Це означає, що внутрішня функція не змінює this, навіть якщо викликається як метод.
Практика і реалізація
// Класичний функціональний колбек
setTimeout(function(){ console.log(this); }, 1000);
// Arrow function з лексичним this
setTimeout(()=>{ console.log(this); }, 1000);
У React‑компонентах часто пишуть:
const handleClick = () => setCount(c=>c+1);
Тестування
import { describe, it, expect } from 'vitest';
describe('arrow function', () => {
it('should preserve this', () => {
const obj = { val: 42, getVal: () => this.val };
expect(obj.getVal()).toBe(42);
});
});
Особливості в контексті JS / TS Core
- Підтримка у всіх сучасних браузерах і Node.js.
- У TypeScript типи визначаються автоматично, але можна явно вказати:
(a:number,b:number)=>number.
Оптимізація, типові помилки та edge cases
- Не використовуйте arrow function для конструктора, бо
newне працює. - У циклі
forEacharrow function зберігає зовнішнєthis, що може бути корисним, але іноді треба явно прив’язати контекст.
Диагностика і отладка
- Якщо
thisне відповідає очікуваному, перевірте чи використовується arrow function. - Для колбеків у бібліотеках, що очікують
this, використовуйте звичайну функцію або.bind(this).
Часті помилки
- Використання arrow function як конструктора.
- Очікування
argumentsу arrow function. - Неправильне розуміння лексичного
thisу вкладених функціях. - Забудова implicit return при використанні блоку
{}. - Перетворення arrow function у метод класу без
bind. - Втрата контексту при передачі колбеку в сторонні API, що очікують
this. - Неправильне використання arrow function у
setTimeoutз параметромthis. - Змішування arrow function і
new.targetу модульних функціях.