Добрый день.
Не могу разобраться в контексте.
function Foo () {
this.log = function () {
console.log(this) // Foo {log: f} (тут все ясно)
setTimeout(() => console.log(this), 500)
}
}
Внутри метода log,
вызывается функция setTimeout, которая "передает" контекст стрелочной функции, и та прекрасно отрабатывает.
const f = new Foo()
f.log() // Foo {log: f}
Исходя из определений, при вызове функции (даже внутри метода объекта) ее this равен глобальному объекту, в данном случае window.
Собственно, главный вопрос:
почему setTimeout может передать контекст(в стрелочную функцию), который равен экземпляру, созданному при момощи конструтора Foo? Ведь setTimeout вызывается как функция.
У меня есть предположение, что тут присутствуют какие-то исключения, ну, или я что-то пропускаю.