Essa afirmação de que o interpretador executa o código linha a linha também é controversa.
Se fosse esse o caso, o código abaixo não funcionaria:
f(x);
function(x) {
...
}
Nesse caso estou chamando uma função antes de definí-la.
Para uma explicação mais tecnica do que ocorre, veja https://developer.mozilla.org/en-US/docs/Glossary/Hoisting