Questão de Programação — JavaScript — Quadrix 2025
- Código
- qg596728
- Banca
- Quadrix
- Órgão
- CRC-SP
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento
- CCerto
- EErrado
GabaritoE — Errado
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.
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.
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.
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