Precisa de explicação sobre a questão do escopo em javascript

Eu tenho esse código

var Variable = "hello";

function say_hello ()
{
    alert(Variable);
    var Variable = "bye";
}

say_hello();
alert(Variable);

Agora, quando li esse código pela primeira vez, pensei que ele alertaria "olá" duas vezes, mas o resultado é que ele alerta "indefinido" na primeira vez e "olá" na segunda vez. alguém pode me explicar por que?

questionAnswers(3)

yourAnswerToTheQuestion