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

CechaDeclarationArrow
HoistingTakNie
thisWłasneDziedziczone
newTakNie
argumentsTakNie (użyj ...rest)
SkładniaRozwlekłaZwię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

  1. Napisz arrow sumującą 3 liczby.
  2. Przerób declaration na arrow, sprawdź this.
  3. Callback: setTimeout z arrow.

Poprawka do oryginału: Dodano pułapki, tabela, ćwiczenia; rozszerzono przykłady.