Sobes.tech
Middle

Opowiedz mi o sposobach zachowania kontekstu w JavaScript: bind, call, apply. Czym się różnią?

sobes.tech AI

Odpowiedź od AI

W JavaScript funkcje są obiektami pierwszej klasy i mają dynamiczny kontekst wywołania (this). Metody bind, call i apply pozwalają na zarządzanie tym kontekstem:

  • call — wywołuje funkcję natychmiast, przekazując kontekst i argumenty osobno.

    func.call(context, arg1, arg2);
    
  • apply — podobne do call, ale argumenty są przekazywane jako tablica.

    func.apply(context, [arg1, arg2]);
    
  • bind — nie wywołuje funkcji od razu, lecz zwraca nową funkcję z powiązanym kontekstem i opcjonalnie częściowo zastosowanymi argumentami.

    const boundFunc = func.bind(context, arg1);
    boundFunc(arg2);
    

Różnice:

  • call i apply wywołują funkcję natychmiast;
  • bind zwraca nową funkcję do wywołania później;
  • apply jest przydatne, gdy argumenty są już w tablicy;
  • bind jest przydatne do zachowania kontekstu w callbackach i obsłudze zdarzeń.