Problemas com escopo em loops assombram os desenvolvedores javascript desde sempre. Vamos ver um exemplo triste:
Por conta do hoisting a variável segue acessível mesmo fora do escopo do loop, para o qual ela foi criada. Usando let conseguimos ter o comportamento esperado:
Seguindo nosso bullying com vars, funções que recebem vars como parâmetro dentro de loops apresentam um comportamento interessante também, vamos ver: