JavaScript 'içando' [duplicado]

Esta questão já tem uma resposta aqui:

Escopo e levantamento de funções Javascript 15 respostas

Eu encontrei o içamento de JavaScript e não descobri como esse trecho de código realmente funciona:

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}

b();
alert(a);

Eu sei que declaração de função como (function a() {} ) vai ser içada para o topo da funçãob escopo, mas não deve sobrepor o valor dea (porque as declarações de função substituem as declarações de variáveis, mas não a inicialização da variável), então eu esperava que o valor do alerta fosse 10 em vez de 1 !!

questionAnswers(5)

yourAnswerToTheQuestion