Pular para o conteúdo principal

Questão de Programação — JavaScript — Quadrix 2025

ProgramaçãoJavaScript
Código
qg596728
Banca
Quadrix
Órgão
CRC-SP
Ano
2025
Nível
Superior
Cargo
Analista de Desenvolvimento
A respeito das linguagens de programação, julgue o item a seguir.Em JavaScript, variáveis declaradas com var têm escopo de bloco, o que evita conflitos entre as funções.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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”.

Escopo de variáveis em JavaScript: var, let e const

Gabarito: E — ERRADO. A afirmação está incorreta porque, em JavaScript, variáveis declaradas com var possuem escopo de função (function-scoped), e não escopo de bloco. O escopo de bloco é característica das declarações let e const, introduzidas no ECMAScript 6 (ES6). A confusão entre esses dois tipos de escopo é uma pegadinha clássica em provas de programação.

O escopo de uma variável define onde ela pode ser acessada no código. Em JavaScript, existem três tipos principais de escopo: global, de função e de bloco. A declaração var é a mais antiga e possui comportamento peculiar: ela respeita o escopo de função, mas ignora o escopo de bloco. Isso significa que, se você declarar uma variável com var dentro de um bloco { } (como um if ou um for), ela ainda será acessível fora desse bloco, desde que esteja dentro da mesma função. Já let e const respeitam o escopo de bloco, ou seja, a variável só existe dentro do bloco onde foi declarada.

Vamos a um exemplo prático para fixar:

function exemplo() {
  if (true) {
    var a = 10;   // var: escopo de função
    let b = 20;   // let: escopo de bloco
    const c = 30; // const: escopo de bloco
  }
  console.log(a); // 10 — acessível, pois var ignora o bloco
  console.log(b); // ReferenceError: b is not defined
  console.log(c); // ReferenceError: c is not defined
}

Perceba que a é acessível fora do if, porque var tem escopo de função. Já b e c não são acessíveis, pois let e const têm escopo de bloco. Essa é a diferença central que a questão explora.

Outra característica importante do var é o hoisting (elevação): a declaração da variável é movida para o topo do escopo da função, mas a atribuição permanece no lugar. Isso pode gerar comportamentos inesperados, como acessar uma variável antes de declará-la (resultando em undefined). let e const também sofrem hoisting, mas não são inicializadas até a declaração ser alcançada, o que gera erro se acessadas antes (Temporal Dead Zone).

A banca Quadrix, nessa questão, inverteu o conceito: atribuiu ao var o escopo de bloco, que na verdade é do let e const. Essa é uma pegadinha recorrente em concursos, pois muitos candidatos confundem os três tipos de declaração. Para não errar, lembre-se da regra de ouro: var = escopo de função; let e const = escopo de bloco.

1var
Escopo de função
Ignora bloco { }
Hoisting (undefined)
2let
Escopo de bloco
TDZ (erro antes da declaração)
3const
Escopo de bloco
TDZ (erro antes da declaração)
Não pode ser reatribuída
Escopo em JavaScript
LEVELsoulevel.com.br
Escopo em JavaScript: var (Escopo de função, Ignora bloco { }, Hoisting (undefined)); let (Escopo de bloco, TDZ (erro antes da declaração)); const (Escopo de bloco, TDZ (erro antes da declaração), Não pode ser reatribuída)

Item — ❌ ERRADO

A afirmação diz que "variáveis declaradas com var têm escopo de bloco". Isso é falso. O var tem escopo de função, como vimos. O escopo de bloco é exclusivo de let e const. Além disso, a segunda parte da frase — "o que evita conflitos entre as funções" — também é incorreta, pois o escopo de função do var não evita conflitos entre funções; na verdade, o var pode causar conflitos justamente por vazar do bloco para a função. O que evita conflitos é o escopo de bloco do let/const, que isola a variável dentro do bloco.

NÃO CAIA NESSA!

A banca troca o escopo do var pelo escopo do let/const. Muitos candidatos, ao verem "escopo de bloco", lembram que let e const têm esse escopo e marcam como certo, sem perceber que a afirmação se refere ao var. Fique atento: var é função, let/const é bloco. Essa é a inversão clássica que a Quadrix adora cobrar.

PEGA ESSA DICA!

Para memorizar, use o mnemônico: Var = Função (V de var, F de função); Let e Const = Bloco (L/C de let/const, B de bloco). Na prova, ao ver "escopo de bloco", pergunte-se: "qual palavra-chave?" Se for var, está errado; se for let ou const, está certo.

Gabarito: E — ERRADO.

Link permanente: /questoes/qg596728