Потеря «this»



При передаче методов объекта в качестве колбэков, например для setTimeout, возникает известная проблема – потеря this.

Как только метод передаётся отдельно от объекта – this теряется.



На картинке выше, При запуске этого кода мы видим, что вызов this.firstName возвращает не «Вася», а undefined!



Это произошло потому, что setTimeout получил функцию sayHi отдельно от объекта user (именно здесь функция и потеряла контекст).



Метод setTimeout в браузере имеет особенность: он устанавливает this=window для вызова функции. 

Таким образом, для this.firstName он пытается получить window.firstName, которого не существует.

В других подобных случаях this обычно просто становится undefined.



#потеря_this #функции