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