

Seu próximo nível começa aqui
Seu desenvolvimento não pode ter limites. Garanta sua Assinatura Ilimitada e libere uma preparação completa com os melhores professores do Brasil.
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:

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 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.
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.
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.
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.
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.