Почему переменная, объявленная внутри цикла, не считается за ошибку?
let и const действуют до ближайших скобок, новые скобки — новый контекст
Вы бы написали, что за язык, но есть правила: фигурные скобки задают блок, а внутри блока новый уровень вложенности и локальных переменных, т.е. локальная переменная не связана с такой же по имени внешней.
Можете попробовать так:
let max;
{let max;}