Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] let no for

Quando fui escrever o código esqueci de pôr o "let" antes do i = 0, dessa forma:

for (i = 0, i < imagemCarros.length; i = i + 1)

e percebi que o código não deu erro e até rodou normalmente fazendo a função do for.

Esse let antes do "i" tem alguma mudança real ou é mais por "capricho"?

4 respostas
solução!

Olá João, tudo bem contigo?

A palavra chave let é utilizada quando vamos declarar uma variável a primeira vez, e após a variável declarada, podemos acessá-la direto pelo seu nome e não é mais necessário utilizar o let, além disso, podemos usar a palavra chave var. Existe também a palavra chave const, para criar constantes, mas dentro de um loop for não é muito indicado, porque normalmente queremos que a variável mude de valor.

Portanto, o let é necessário na primeira vez que vamos utilizar a variável, para que ela seja definida. O que provavelmente aconteceu no seu código para não ser acusado nenhum erro, é que esta variável i já havia sido declarada em um escopo mais aberto, e nesse caso o laço for utilizou a variável que já existia!

Em caso de dúvidas, estou à disposição!

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Então se eu usar o let apenas uma vez no meu código inteiro, não precisarei repeti-lo nas outras vezes que escrever o for?

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!

Entendi, obrigado!