Warum wird eine Shadowed Variable als undefiniert ausgewertet, wenn sie außerhalb des Gültigkeitsbereichs definiert ist?

Betrachten Sie den folgenden Code:

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

Die Ausgabe für diesen Code ist, dass das Warnungsfeld die Meldung "außerhalb des Bereichs" anzeigt. Aber wenn ich den Code leicht ändere als:

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

Das Warnfeld zeigt die Meldung "nicht definiert". Ich hätte die Logik verstehen können, wenn sie in beiden Fällen" undefiniert "anzeigt. Aber das passiert nicht. Sie zeigt nur im zweiten Fall" undefiniert "an. Warum ist das so?

Vielen Dank im Voraus für Ihre Hilfe!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage