Pular para o conteúdo principal

Questão de Programação — CSS (Cascading Style Sheets) — VUNESP 2026

ProgramaçãoCSS (Cascading Style Sheets)
Código
gp003719
Banca
VUNESP
Órgão
UNESP
Ano
2026
Cargo
V - - Analista de Informática I - Área de Atuação: Desenvolvimento de Sistemas - Edital nº 350
Considere o seguinte código JavaScript dentro de uma página web.

<script>
let x = 10;
{let x = 15;}
{x = x + 3;}
document.getElementById( output ).innerHTML = x;
</script>

A saída exibida no elemento output após a execução do script é:
  1. Avazia (em branco)
  2. B3
  3. C10
  4. D13
  5. E18
Revelar gabarito e comentário

GabaritoD — 13

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Resolução

Gabarito: letra D — a conta chega a 13 — alternativa D.

A ideia por trás

Em JavaScript, o escopo de uma variável define onde ela pode ser usada. Antes do ES6, a palavra-chave var ignorava blocos de chaves e a variável vazava para a função inteira. Com let e const, a variável fica restrita ao bloco onde foi declarada — um bloco é qualquer trecho entre chaves, como em if, for, while ou um bloco isolado. Isso evita vazamentos, mas cria uma pegadinha: nem todo bloco cria uma nova variável, só se houver uma declaração dentro.

A regra é: declarar (let x = 15) cria uma nova variável no escopo corrente; atribuir (x = x + 3) modifica a variável existente no escopo corrente ou, se não existir, no escopo mais próximo que a contenha. Se um bloco não tem declaração, a atribuição procura a variável para fora do bloco. Por isso, um bloco com apenas uma atribuição não isola nada — ele age sobre a variável externa.

Esta questão testa exatamente essa distinção: o primeiro bloco declara uma nova variável local, o segundo apenas atribui. Perceber que o segundo bloco não tem declaração é o passo decisivo.

O que a questão dá

  • let x = 10;

  • {let x = 15;}

  • {x = x + 3;}

  • document.getElementById('output').innerHTML = x;

O que queremos: o valor exibido no elemento output após a execução do script

Passo 1 — Ver o valor inicial de x

O script começa declarando x com 10. Esse é o valor de partida que todas as operações seguintes vão usar, então precisamos fixá-lo antes de analisar os blocos.

x=10x = \boxed{10}
NÃO CAIA NESSA!

Esquecer que a variável externa começa em 10 e tentar somar 15 + 3 direto.

Passo 2 — Analisar o primeiro bloco

O primeiro bloco tem uma declaração let x = 15. Como let tem escopo de bloco, essa declaração cria uma nova variável que só existe dentro das chaves. Ela não altera a x externa, que continua 10.

x externa continua 10

NÃO CAIA NESSA!

Achar que o primeiro bloco modifica a x externa para 15 — mas a declaração let cria uma variável local, independente.

Passo 3 — Analisar o segundo bloco

O segundo bloco não tem declaração, apenas a atribuição x = x + 3. Como não há let, const ou var, a atribuição não cria uma nova variável — ela procura a x existente no escopo externo, que vale 10, e soma 3.

Por que esta fórmula: A atribuição x = x + 3 lê o valor atual de x (10) e atribui o resultado (13) à mesma variável. É uma atualização, não uma nova declaração.

x=x+3x = x + 3

De onde vem cada valor: xx = passo 1: 10

x=10+3x = 10 + 3
x=13x = \boxed{13}
NÃO CAIA NESSA!

Pensar que o segundo bloco também cria uma variável local, deixando a externa em 10 — mas sem declaração, a atribuição age na externa.

Passo 4 — Exibir o valor final

A última linha do script coloca o valor de x no elemento output. Como x foi atualizada para 13 no passo anterior, é esse valor que aparece na página.

13\boxed{13}
NÃO CAIA NESSA!

Confundir a ordem: o primeiro bloco não afeta a externa, então não se soma 15 + 3 = 18.

Resposta: 13 — alternativa D

Link permanente: /questoes/gp003719