Questão nº 54
Questão de Tecnologia da Informação · FGV BANESTES 2021 (nº 54)
FGV2021Analista em Tecnologia da Informação - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Cver comentário ↓
Analise o script JS a seguir.
<script>
function xpto() {
let n = 0;
return {next:
function()
{
if (n < 10) {
n += 2;
return {value:n/2, done:false}}
else {
return {value: -1, done: true}}
}
}
}
saida = ""
const n = xpto();
x = n.next();
while (x.done == false) {
saida += x.value + "/";
x = n.next();
}
alert(saida);
</script>
O resultado da execução desse código é:
- A`-1/-2/-3/-4/-5/`
- B`0/1/2/3/4/5/`
- C`1/2/3/4/5/` (alternativa correta)
- D`5/4/3/2/1/`
- E`5/4/3/2/1/0`
Resposta comentada
Gabarito Alternativa C
Closures em JavaScript permitem que uma função interna "lembre" e acesse variáveis do seu escopo externo, mesmo depois que a função externa já terminou de executar, mantendo o estado dessas variáveis entre chamadas.
- (A) Incorreta: Os valores gerados são positivos e crescentes, não negativos e decrescentes.
- (B) Incorreta: A variável
né incrementada (n += 2) antes de ser usada para calcularvalue. O primeironé 0, mas na primeira chamada an.next(), ele se torna 2, resultando emvalue = 2/2 = 1. A armadilha aqui é pensar que o valor inicial den(0) seria usado na primeira iteração, ou que0/2seria o primeiro valor. - (C) Correta: O código implementa um iterador usando uma closure. A variável
nmantém seu estado entre as chamadas ao métodonext().- 1ª chamada a
n.next():n(que era 0) vira 2. Retorna{value: 1, done: false}.saida= "1/". - 2ª chamada a
n.next():n(que era 2) vira 4. Retorna{value: 2, done: false}.saida= "1/2/". - 3ª chamada a
n.next():n(que era 4) vira 6. Retorna{value: 3, done: false}.saida= "1/2/3/". - 4ª chamada a
n.next():n(que era 6) vira 8. Retorna{value: 4, done: false}.saida= "1/2/3/4/". - 5ª chamada a
n.next():n(que era 8) vira 10. Retorna{value: 5, done: false}.saida= "1/2/3/4/5/". - 6ª chamada a
n.next():n(que era 10) não é mais menor que 10. Retorna{value: -1, done: true}. O loopwhiletermina.
Oalertexibe "1/2/3/4/5/".
- 1ª chamada a
- (D) Incorreta: Os valores gerados são crescentes, não decrescentes.
- (E) Incorreta: Os valores gerados são crescentes e o loop termina antes de gerar um 0.
Fonte: FGV BANESTES 2021 Analista em Tecnologia da Informação - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.