Контекст выполнения в js: запутался, как понять?
Тут дело не в контексте, а в том что вы смешиваете синхронный код (цикл for) и асинхронный setTimeout (даже если вы поставите 0 секунд, это не сделает его синхронным, это всего лишь значит что будет использовано минимально возможное время, близкое к 0).
Именно по этому вначале цикл выполнится 50 раз, и переменная count будет равной 50. И тоолько потом, через какое-то минимльное время, запустится 50 таймаутов и конечно каждый из них выведет 50 в консоль.
Порядок действий такой:
1. Выполнить цикл (в котором много раз ставится в очередь задач функция "function() { console.log(count); }"),
2. Выполнить следующие задачи из очереди, то есть 50 раз выполнить функцию "function() { console.log(count); }", во время выполнения которой переменная count равна 50.