No contexto do JavaScript, analise as afirmativas a seguir a respeito do comportamento do JS de mover declarações para o top (em inglês, Hoisting). I. Variáveis declaradas por meio de var podem ser utilizadas antes de declaradas. II. Variáveis declaradas com let e const são movidas para o topo do bloco somente quando inicializadas na declaração. III. Usar uma constante (const) antes de declarada gera um erro de sintaxe. Está correto o que se afirma em:
- A)somente I;
Certa, porque apenas a afirmativa I corresponde ao comportamento real do hoisting com var.
- B)somente I e II;
Errada, porque a afirmativa II descreve de forma incorreta o hoisting de let e const.
- C)somente I e III;
Errada, porque a afirmativa III também está incorreta: o erro é de execução, não de sintaxe.
- D)somente II e III;
Errada, pois tanto a II quanto a III estão erradas.
- E)I, II e III.
Errada, porque II e III não estão corretas no contexto do hoisting em JavaScript.
Gabarito: A
No JavaScript, "hoisting" é aquele truque do motor da linguagem que faz declarações parecerem ter ido para o topo do escopo. Mas atenção: isso não significa que toda variável já pode ser usada de boa antes de aparecer no código. Com var, a declaração é hoisted e a variável existe desde o início do escopo, ainda que com valor undefined. Por isso, a afirmativa I está correta. Já let e const também são hoisted, mas entram na chamada temporal dead zone até a linha da declaração ser executada. Em outras palavras, elas ficam "reservadas", porém inacessíveis antes da inicialização. Então a afirmativa II está errada, porque não é só quando inicializadas que são levadas ao topo; o que muda é o acesso, não o hoisting. A afirmativa III também está errada porque usar const antes de declarar não gera erro de sintaxe. O erro ocorre em tempo de execução, normalmente um ReferenceError, já que a variável ainda está na temporal dead zone. Em concurso, vale guardar a diferença: var permite acesso antes da linha, let/const não permitem, mas continuam sendo hoisted. Assim, o gabarito A está correto porque somente a afirmativa I descreve adequadamente o comportamento do JavaScript.