Por que o JavaScript eleva as variáveis?
Qual foi o raciocínio dos designers quando decidiram implementar o içamento? Existem outras linguagens populares que fazem isso?
Forneça links relevantes para documentação e / ou registros.
Por que o JavaScript eleva as variáveis?
Qual foi o raciocínio dos designers quando decidiram implementar o içamento? Existem outras linguagens populares que fazem isso?
Forneça links relevantes para documentação e / ou registros.
div
em jQuery
Respostas:
Como Stoyan Stefanov explica no livro "Padrões JavaScript", a elevação é resultado da implementação do interpretador JavaScript.
A interpretação do código JS realizada em duas passagens. Durante a primeira passagem, o interpretador processa declarações de variáveis e funções.
A segunda passagem é a etapa real de execução do código. O intérprete processa expressões de função e variáveis não declaradas.
Assim, podemos usar o conceito de "içamento" para descrever tal comportamento.
"Var içamento foi, portanto, [uma] consequência não intencional de função içamento, sem escopo de bloco, [e] JS como um trabalho urgente de 1995."
"função de içamento permite decomposição de programa de cima para baixo, 'deixe rec' de graça, ligue antes de declarar; var içada junto."
Não conheço nenhuma outra linguagem popular que erga variáveis da mesma maneira. Acho que até o ActionScript - outra implementação do ECMAScript usada no desenvolvimento do Flash - não implementou içamento. Isso tem sido uma fonte de confusão e frustração para desenvolvedores familiarizados com outras linguagens que estão aprendendo JavaScript.
Isso ocorre porque o interpretador javascript interpreta o código em dois ciclos.
No 1º ciclo todas as variáveis e funções declarações são levados para cima do escopo da função que está sendo executada. Isso ajuda na criação variableObjects
de execution context
da função mesmo antes de sua execução.
Na 2ª fase, as atribuições de valor, instruções de código e chamadas de função ocorrem linha por linha da maneira esperada.
Você leu um pouco mais detalhadamente aqui.
Ele lhe dará uma melhor imagem em torno em torno do comportamento let
, const
e class
declarações, também a precedência que segue entre variável e funções.