6. Funkcje – deklaracja, function expression, arrow functions
~40 min
podstawowy
Funkcje to bloki kodu wielokrotnego użytku. W JS funkcje są first-class – traktowane jak wartości.
1. Function Declaration
Hoisting pozwala wywołać przed definicją.
przywitaj("Kasia"); // Działa!
function przywitaj(imie) {
console.log(`Cześć, ${imie}!`);
}
przywitaj("Tomek");
Ciekawostka: Hoisting podnosi deklaracje na górę zakresu, ale nie inicjalizacje.
2. Function Expression
Przypisana do zmiennej, bez hoistingu.
// Błąd przed definicją
// powitanie("Asia"); // TypeError
const powitanie = function(imie) {
console.log(`Hej, ${imie} 👋`);
};
powitanie("Asia");
Ciekawostka: Często używane w callbackach, np. setTimeout.
3. Arrow Functions
Najpopularniejsze w 2026 (ES6+), zwięzłe, brak własnego this.
const razyDwa = (x) => { return x * 2; };
const razyTrzy = x => x * 3;
const hello = () => console.log("Cześć!");
const suma = (a, b) => a + b;
const witajDuze = imie => {
const duze = imie.toUpperCase();
return `Witaj ${duze}!`;
};
W 2026: Arrow w 95% kodu (React, Node).
4. Różnice
| Cecha | Declaration | Arrow |
|---|---|---|
| Hoisting | Tak | Nie |
| this | Własne | Dziedziczone |
| new | Tak | Nie |
| arguments | Tak | Nie (użyj ...rest) |
| Składnia | Rozwlekła | Zwięzła |
5. Pułapki
- Wywołanie arrow przed def. → błąd
- this w arrow → otoczenie
- Brak return w bloku
- Nadmiarowe {}
Ostrzeżenie: Arrow nie dla metod obiektów jeśli this potrzebne.
6. Porównanie
function pomnoz(a, b) { return a * b; }
const pomnozExpr = function(a, b) { return a * b; };
const pomnozArrow = (a, b) => a * b;
Reguła: Arrow w większości, declaration dla hoisting/constructors.
Ćwiczenie
- Napisz arrow sumującą 3 liczby.
- Przerób declaration na arrow, sprawdź this.
- Callback: setTimeout z arrow.
Poprawka do oryginału: Dodano pułapki, tabela, ćwiczenia; rozszerzono przykłady.