\n\nConsiderando o código precedente, desenvolvido em\nECMAScript 6, assinale a opção que apresenta o resultado mostrado ao usuário ao final da execução desse código.","inLanguage":"pt-BR","eduQuestionType":"Multiple choice","acceptedAnswer":{"@type":"Answer","text":"C) 10. No ECMAScript 6, a palavra-chave let cria variáveis com escopo de bloco. Isso significa que cada par de chaves { ... } abre um espaço próprio, e o x declarado dentro dele não mexe no x que foi declarado fora. Ou seja: existe um x global no valor 10, e dentro de cada bloco aparecem x diferentes, que vivem e morrem ali mesmo.\n\nNo código da questão, o primeiro bloco cria um x com valor 1 e depois faz x = x - 1, chegando a 0, mas esse valor fica preso naquele bloco. O segundo bloco cria outro x com valor 3 e depois vira 8. O terceiro bloco cria mais um x com valor 20 e depois vai para 22. Tudo bonitinho, cada um no seu quadrado.\n\nQuando o programa executa document.getElementById(\"demo\").innerHTML = x;, ele usa o x de fora, que foi declarado antes dos blocos e nunca foi alterado. Portanto, o valor mostrado ao usuário é 10.\n\nEsse é um ponto clássico de prova sobre escopo lexical e block scope no JavaScript moderno, muito cobrado desde o ES6. A banca gosta de testar se você confunde variável interna de bloco com a variável externa que continua intacta."},"suggestedAnswer":[{"@type":"Answer","text":"A) 0"},{"@type":"Answer","text":"B) 8"},{"@type":"Answer","text":"D) 12"},{"@type":"Answer","text":"E) 22"}]}← Questões de Programação

Programação · CESPE/CEBRASPE · 2024

Questão comentada de Programação

<html> <body> <p id="demo"></p> <script> let x = 10;{ let x = 1; x = x - 1; } { let x = 3; x = x + 5; } { let x = 20; x = x + 2; } document.getElementById("demo").innerHTML = x; </script> </body> </html> Considerando o código precedente, desenvolvido em ECMAScript 6, assinale a opção que apresenta o resultado mostrado ao usuário ao final da execução desse código.

Gabarito: C

No ECMAScript 6, a palavra-chave let cria variáveis com escopo de bloco. Isso significa que cada par de chaves { ... } abre um espaço próprio, e o x declarado dentro dele não mexe no x que foi declarado fora. Ou seja: existe um x global no valor 10, e dentro de cada bloco aparecem x diferentes, que vivem e morrem ali mesmo. No código da questão, o primeiro bloco cria um x com valor 1 e depois faz x = x - 1, chegando a 0, mas esse valor fica preso naquele bloco. O segundo bloco cria outro x com valor 3 e depois vira 8. O terceiro bloco cria mais um x com valor 20 e depois vai para 22. Tudo bonitinho, cada um no seu quadrado. Quando o programa executa document.getElementById("demo").innerHTML = x;, ele usa o x de fora, que foi declarado antes dos blocos e nunca foi alterado. Portanto, o valor mostrado ao usuário é 10. Esse é um ponto clássico de prova sobre escopo lexical e block scope no JavaScript moderno, muito cobrado desde o ES6. A banca gosta de testar se você confunde variável interna de bloco com a variável externa que continua intacta.

Continue treinando

Questões relacionadas