Por que a variável sombreada é avaliada como indefinida quando definida no escopo externo?

Considere o seguinte trecho de código:

<html><head></head>
<body>
    <script type="text/javascript">
        var outside_scope = "outside scope";
        function f1() {
            alert(outside_scope) ;
        }
        f1();
    </script>
</body>
</html> 

A saída deste código é que a caixa de alerta exibe a mensagem "escopo externo". Mas, se eu modificar ligeiramente o código como:

<html><head></head>
<body>
    <script type="text/javascript">
        var outside_scope = "outside scope";
        function f1() {
            alert(outside_scope) ;
            var outside_scope = "inside scope";
        }
        f1();
    </script>
</body>
</html> 

a caixa de alerta exibe a mensagem "Indefinido"Eu poderia ter entendido a lógica se ela exibir" indefinida "em ambos os casos. Mas isso não está acontecendo. Ela exibe" indefinida "apenas no segundo caso. Por que isso acontece?

Agradeço antecipadamente por sua ajuda!

questionAnswers(6)

yourAnswerToTheQuestion