Analise o seguinte trecho de código em JavaScript executado ...

Próximas questões
Com base no mesmo assunto
Q4232604 Programação
Analise o seguinte trecho de código em JavaScript executado em um ambiente compatível com ECMAScript 6 (ES6) ou superior:

let a = 10; var b = 15; if (true) {      let a = 11;      var b = 17; } console.log(a+b);

Qual será o valor exibido por console.log(a+b) após a execução do código? 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: C

Fundamento decisivo: A decisão dependia do escopo em JavaScript: o let do bloco if não altera o a externo, e o var declarado no bloco permanece visível fora dele. Assim, após o bloco, os valores usados são a = 10 e b = 17, o que leva ao resultado 27.

Tema central: Escopo de let e var
Análise das alternativas
A
Errada
25 corresponderia a 10 + 15, como se o "var b = 17" dentro do bloco não produzisse efeito no b lido após o if. Isso contraria o critério decisivo da questão: var não fica restrito ao bloco no código apresentado.
B
Errada
26 corresponderia a 11 + 15, tratando o a interno como se substituísse o externo e, ao mesmo tempo, ignorando a permanência de b = 17 fora do bloco. O confronto correto é: o let interno é restrito ao bloco, então fora dele a continua 10.
C
Certa
A alternativa C está correta porque a resolução depende do critério de escopo em JavaScript ES6. O "let a = 11" declarado dentro do bloco cria uma variável própria do bloco e apenas sombreia o a externo naquele trecho, sem alterá-lo fora do if. Já o "var b = 17" não tem escopo de bloco no contexto apresentado e afeta o mesmo b acessado após o bloco. Portanto, ao executar o console.log, a expressão usa a = 10 e b = 17, resultando em 27.
D
Errada
28 corresponderia a 11 + 17, como se tanto o let interno quanto o var interno permanecessem fora do bloco. Isso erra especificamente o comportamento de let, que no bloco apenas sombreia a variável externa e não a altera após o fechamento do if.
E
Errada
32 não resulta de nenhuma leitura correta do escopo das variáveis nesse código. Pelo critério aplicável, a soma fora do bloco é 10 + 17.
Pegadinha da questão
A confusão real era tratar let e var como se tivessem o mesmo escopo, ou simplesmente somar os valores mais recentes sem verificar quais continuam válidos fora do bloco.
Dica para questões semelhantes
  • Ao ver declaração dentro de bloco, confirme primeiro se a variável foi criada com let ou com var antes de calcular o valor fora dele.
  • Se houver let com mesmo nome em bloco interno, trate-o como sombreamento temporário da variável externa, não como alteração definitiva.
  • Se houver var dentro de bloco no contexto mostrado, verifique seu efeito na variável acessada depois do bloco, porque ele não fica restrito ao if.

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

let só vale dentro do bloco { }, então o a = 11 não altera o a = 10 de fora.

var vale fora do bloco, então o b = 17 substitui o b = 15.

Resultado: 10 + 17 = 27.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo