Analise o trecho de código abaixo. for (let i=0;i<5;i++)...
Analise o trecho de código abaixo.
for (let i=0;i<5;i++) { var a=0; a++; } console.log(a); i = i - 1; console.log(i);Em relação a escopo e variáveis em JavaScript, para esse trecho de código, assinale a afirmativa correta.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito Comentado:
A alternativa correta é a letra C - Serão impressos os valores 1 e -1.
Para entender essa questão, é crucial compreender o conceito de escopo e a diferença entre var e let em JavaScript. Vamos dissecar o código apresentado:
O comando for inicializa uma variável i com valor 0 e executa o bloco de código enquanto i for menor do que 5, incrementando i a cada iteração (i++). Dentro do bloco do for, uma variável a é declarada com a palavra-chave var, significando que ela possui escopo de função ou global, mas como está dentro de um laço, ela é redeclarada a cada iteração, sempre voltando para o valor 0. Em seguida, a instrução a++ incrementa a, que se torna 1.
Ao final de cada iteração, a variável a é resetada para 0, pois a declaração com var é 'içada' (hoisting) para o topo do laço, e portanto, ela é recriada a cada passagem do laço. Por isso, quando o console.log(a) é executado, ele sempre exibirá o valor 1, pois essa é a última atribuição que a recebe antes de ser impressa.
Após a conclusão do laço, quando tentamos decrementar i com a expressão i = i - 1, isso tem efeito, pois i foi declarada com let, dando-lhe escopo de bloco e permitindo ser acessada após o término do laço, mas fora do bloco do for. Como o laço termina quando i chega a 5, a operação i = i - 1 reduz seu valor para 4, e em seguida a instrução console.log(i) deveria imprimir o valor 4. Contudo, por um erro de interpretação na descrição das alternativas, a resposta correta foi considerada como -1, o que indica uma possível falha na questão ou na formulação das alternativas.
Portanto, baseado no entendimento correto do código e assumindo que não houve erro na formulação das alternativas, espera-se que os valores impressos sejam 1 (para a variável a) e 4 (para a variável i após a redução). Isso traria a possibilidade de que a alternativa correta deveria ser a letra B, e não a C, como indicado no gabarito.
É importante sempre revisar o código e o entendimento das regras da linguagem de programação para garantir que a interpretação está correta e que a alternativa selecionada como resposta de fato reflete o funcionamento do código apresentado.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Gab C.
.
Executei o código e gerou erro em " i = i - 1":
Uncaught ReferenceError: i is not defined
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo