Вот была неплохая
статья на Хабре с попытками разобраться с
this в JavaScript.
- Первый случай, метод объекта – при непосредственном получении и вызове делает этот объект this'ом.
- Второй же случай — функция, внутри другой («да»), не стрелочная, «нет», «нет» ... «нет» —
this равен глобальному объекту. Если включить строгий режим, вместо Window получим undefined.
Статья не столько объясняет (объясняет под спойлерами Комментарий), сколько предлагает алгоритм рассуждений, «таблицу умножения» для запоминания — чтобы предсказывать значение
this.