Necesita explicación sobre el problema de alcance en javascript

Tengo este codigo

var Variable = "hello";

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

say_hello();
alert(Variable);

Ahora, cuando leí este código por primera vez, pensé que alertaría "hola" dos veces, pero el resultado que obtengo es que alerta "indefinido" la primera vez y "hola" la segunda vez. ¿Alguien me puede explicar por qué?

Respuestas a la pregunta(3)

Su respuesta a la pregunta