Sobes.tech
Middle

Разкажи ми за начините за запазване на контекста в JavaScript: bind, call, apply. Как се различават?

sobes.tech AI

Отговор от AI

В JavaScript функциите са обекти от първи клас и имат динамичен контекст на извикване (this). Методите bind, call и apply позволяват управление на този контекст:

  • call — извиква функцията веднага, предавайки контекста и аргументите отделно.

    func.call(context, arg1, arg2);
    
  • apply — подобно на call, но аргументите се предават като масив.

    func.apply(context, [arg1, arg2]);
    
  • bind — не извиква функцията веднага, а връща нова функция с обвързан контекст и, по желание, частично приложени аргументи.

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

Разлики:

  • call и apply извикват функцията незабавно;
  • bind връща нова функция за по-късно извикване;
  • apply е полезен, когато аргументите вече са в масив;
  • bind е полезен за запазване на контекста в callback-и и обработчици на събития.