Как пример, при использовании let в цикле у нас переменная не видна дальше области цикла, но
при использовании стрелочной функции в функции или объекте через setTimeout почему-то её контекст не window, а текущая функция или объект, хотя обычная функция в this нам вернет window.
Как понять принцип работы области видимости let и стрелочных функций?
Не вопрос а каша.
1) let виден только в той области видимости в какой задан, включая дочернии, проще говоря, не будет виден, за пределами фигурных скобок, внутри которых его объявили
2) у обычных функций всегда будет свой контекст, на который будет ссылаться this, а в стрелочных его нет, и this будет ссылаться на контекст окружения из которого был вызван.