Fala, João!
Você não precisa redeclarar a variável i
, com o trecho let i = 0;
unicamente se ela foi declarada fora do laço for. Todas as variáveis declaradas dentro do laço, apenas existem dentro dele e deixam de existir quando ele acaba. Exemplos:
Variável declarada fora
let i = 0;
for(i = 0; i < 10; i++){
console.log(i);
}
console.log(i) // valor 10
No exemplo acima, a variável é declarada, é iterado sobre ela 10 vezes dentro do loop e ao final, é mostrado o valor da variável i, que no caso é 10, que foi onde ela parou de executar o laço de repetição. Acessar ela após o término do laço só foi possível porque ela foi declarada fora do laço.
Variável declarada dentro do for
for(let i = 0; i < 10; i++){
console.log(i);
}
console.log(i) // erro
Agora, a variável é declarada dentro do laço, e não existe mais a declaração fora. Isso faz com que a variável exista apenas dentro do laço, e por este motivo, o laço vai mostrar dos números 0 a 9 no console, quebrar o laço e, ao tentar acessar a variável i
para mostrar seu valor no console, o JavaScript vai lançar um erro, dizendo que a variável não foi definida.
Variável declarada dentro e fora do for
let i = 0;
for(let i = 0; i < 10; i++){
console.log(i);
}
console.log(i)
Existe, também, a possibilidade da variável ser declarada dentro e fora do laço simultaneamente, e agora?
Agora, o comportamento será o seguinte: dentro do laço de repetição for, prevalece a variável mais interna, ou seja, a que está dentro de sua declaração e fora, a variável externa
Sendo assim, o comportamento do código é o seguinte: é declarada uma variável i
, iniciando com o valor zero, em seguida é criado um loop for, declarando uma variável i
com o valor 0, que vai iterar até o número 10 e mostrar no console o valor de i
. Ao final do loop, a variável interna, que estaria com o valor 10, deixa de existir, e é mostrado na tela o valor de i
, que se trata da variável declarada fora do loop, com o valor 0. Note que nesse caso, não é lançado um erro para o cliente, pois a variável já foi definida anteriormente.
Para se aprofundar mais, indico o artigo sobre escopos em JavaScript, onde é falado sobre o comportamento do código baseado no escopo.
Fico à disposição.
Um grande abraço e bons estudos!