Como funciona o içamento se o JavaScript é uma linguagem interpretada?
Meu entendimento de um intérprete é que ele executa o programa linha por linha e podemos ver os resultados instantâneos, diferentemente das linguagens compiladas que convertem o código e o executam.
Minha pergunta é, em Javascript, como o intérprete sabe que uma variável é declarada em algum lugar do programa e a registra comoundefined
?
Considere o programa abaixo:
function do_something() {
console.log(bar); // undefined (but in my understanding about an interpreter, it should be throwing error like variable not declared)
var bar = 111;
console.log(bar); // 111
}
É implicitamente entendido como:
function do_something() {
var bar;
console.log(bar); // undefined
bar = 111;
console.log(bar); // 111
}
Como é que isso funciona?