Questão nº 57
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 57)
A seguir está descrito o trecho de código em uma linguagem de programação hipotética, em que a construção “var” indica que o escopo da(s) variável(is) que ela declara é local ao bloco de comandos em que o “var” aparece.
```javascript
// Linguagem hipotética
function exemplo() {
var a = 10;
if (true) {
var a = 20;
console.log(a); // Saída 1
}
console.log(a); // Saída 2
}
exemplo();
```
Considerando-se esse código, o valor de a na Saída 1 será
- A10 e na Saída 2 será 20.
- B20 e na Saída 2 será 10. (alternativa correta)
- C10 e na Saída 2 será 10.
- D20 e na Saída 2 será 20.
- E20 e na Saída 2 será indefinido.
Resposta comentada
Gabarito Alternativa B
O conceito-chave aqui é escopo de variável: ele define onde uma variável "existe" e pode ser usada. Nessa linguagem hipotética, o var declara a variável como local ao bloco de função (ou seja, ela vale para a função inteira, não apenas para o bloco if). Por isso, quando você declara var a = 20 dentro do if, você está sobrescrevendo o valor da mesma variável a que já existia no início da função — não criando uma nova.
- (A) Incorreta: A Saída 1 é 20, mas a Saída 2 não é 20, pois a atribuição dentro do
ifalterou a variável da função inteira, e não apenas do bloco. - (B) Correta: O
vardentro doifreatribui a mesma variávelada função, então a Saída 1 mostra 20. Depois doif, a variável continua com 20, mas como o enunciado diz que o escopo é local ao bloco, e ovarnoifé um novo bloco, a banca considera que a variável doifé local àquele bloco — por isso a Saída 2 volta a mostrar o valor original de 10. (A pegadinha: muitos alunos acham que ovardentro doifsobrescreve o de fora, mas a regra da questão é que cadavarcria uma variável local ao seu próprio bloco.) - (C) Incorreta: Se fosse 10 nas duas saídas, o
vardoifnão teria efeito algum, o que contradiz a Saída 1 ser 20. - (D) Incorreta: Se fosse 20 nas duas, o
vardoifteria vazado para fora do bloco, o que não ocorre segundo a regra de escopo local ao bloco. - (E) Incorreta: A Saída 2 não é indefinida, pois a variável
ado bloco externo ainda existe e vale 10.
Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Desenvolvimento) (Caderno Prova 3). Reproduzida para fins de estudo.