Questão de Programação — JavaScript — FGV 2024
- Código
- fg077017
- Banca
- FGV
- Órgão
- CGE-PB
- Ano
- 2024
- Nível
- Superior
- Cargo
- Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
- A5;
- B10;
- C15;
- D20;
- E55.
GabaritoC — 15;
Gabarito: letra C — o valor retornado após a renderização final é 15.
A função componente Number inicia o estado n com o valor 5 (x). O useEffect com array vazio executa uma vez após a montagem, contendo duas chamadas a setN com funções updater. Entenda o passo a passo:
Estado inicial: n = 5.
Primeiro setN: setN(x => x + n). O parâmetro x representa o estado anterior (que é 5). O n no corpo da função é a variável do escopo do componente, que vale 5. Então retorna 5 + 5 = 10. O estado passa a ser 10.
Segundo setN: setN(y => x + y). O parâmetro y é o estado anterior (agora 10). As variáveis x e y do escopo externo valem ambas 5. O retorno é 5 + 10 = 15. O estado final é 15.
Após o useEffect, o componente re-renderiza com n = 15, que é o valor retornado.
A banca explora a confusão entre os nomes dos parâmetros das funções updater e as variáveis do escopo (x, y, n). No primeiro setN, o x da arrow function não é a variável externa x, mas o estado anterior; já o n usado é o closure (5 fixo). No segundo, o y da arrow é o estado anterior, enquanto x e y do lado direito são as variáveis do componente (ambas 5). Muitos candidatos acham que o n dentro do primeiro updater se refere ao estado atualizado ou que os incrementos se acumulam de forma diferente.
Retornaria 5 se nenhuma atualização ocorresse, ignorando o efeito.
Considera apenas o primeiro setN, resultando em 10, mas o segundo atualiza novamente.
Explica corretamente a sequência: primeiro updater leva a 10, segundo a 15.
Soma incorreta (ex.: 5+5+5+5 = 20), não respeitando a lógica dos updaters.
Possivelmente confunde com concatenação ou soma diferente; não há operação que gere 55.
Gabarito: letra C
Link permanente: /questoes/fg077017