this у обычной функции вычисляется в момент вызова, потому и называется это: "контекст ВЫЗОВА".
Контекст известен в трех случаях:
1. Вызов из объекта: obj.func() или obj['func']() В обоих случаях круглые скобки важны, потому что именно вызов, а не ссылка.
2. Функция вызывается с оператором new. В таком случае, создается новый пустой объект и функция, которая вызывается после new получает ссылку на этот пустой объект в качестве this.
3. Функция вызвана через call, apply или была "забиндина" через bind, в таком случае значение this передается в перечисленные методы в качестве первого параметра.
Во всех остальных случаях this не определен, и ссылается на глобальный контекст, в клиентском js это window, или может быть undefined, если включен strict mode, а также может быть объект DOM, в случае, если используется обычная функция для обработки события, тогда браузер вызывает обработку события в контексте объекта DOM, на котором вешался обработчик.