Imagem de fundo

O JavaScript é uma linguagem de programação multiparadigma, dinâmica e interpretada, am...

O JavaScript é uma linguagem de programação multiparadigma, dinâmica e interpretada, amplamente utilizada tanto no lado do cliente quanto do lado do servidor.

Seu modelo de execução assíncrono e orientado a eventos, aliado a conceitos como closures, hoisting e o sistema de protótipos, exige do desenvolvedor uma compreensão aprofundada de seus mecanismos internos para evitar comportamentos inesperados.


Considere o seguinte trecho de código JavaScript:


Imagem associada para resolução da questão


Sobre o código apresentado, considerando as especificações do ECMAScript 6 (ES6) e o comportamento padrão dos interpretadores JavaScript, assinale a afirmativa correta.


A

A saída no console será 2 2 2, pois a declaração com let faz com que todas as funções capturem o último valor atribuído a i antes de a condição i < 3 ser avaliada como falsa.


B

A saída no console será 3 3 3, pois a variável i é compartilhada entre todas as funções do array, independentemente de ter sido declarada com let ou var.


C

O código gerará um erro de execução (ReferenceError), pois a variável i deixa de existir após o término do laço for, tornando-se inacessível para as funções armazenadas no array.


D

A saída no console será 0 1 2, pois a declaração com let no laço for cria um novo escopo léxico a cada iteração, fazendo com que cada função capture o valor de i correspondente à sua iteração.


E

A saída no console será undefined undefined undefined, pois funções armazenadas em arrays perdem a referência ao escopo em que foram criadas no momento em que o array é retornado pela função externa.