Dlaczego zmienna shadowed ma wartość undefined, gdy jest zdefiniowana w zewnętrznym zakresie?

Rozważ następujący fragment kodu:

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

Wynik tego kodu jest taki, że w oknie alertu wyświetlany jest komunikat „zakres zewnętrzny”. Ale jeśli nieznacznie zmodyfikuję kod jako:

<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> 

okno alertu wyświetla komunikat „niezdefiniowany„. Mógłbym zrozumieć logikę, jeśli w obu przypadkach wyświetla się„ niezdefiniowany ”, ale tak się nie dzieje, wyświetla się„ niezdefiniowany ”tylko w drugim przypadku.

Z góry dziękuje za twoją pomoc!

questionAnswers(6)

yourAnswerToTheQuestion