Warum ist die Funktionsvariable undefiniert, wenn var danach kommt?

Ich habe gelesen, dass es eine gute Praxis ist, eine var-Anweisung, die alle lokalen Variablen definiert, am Anfang jeder Funktion zu setzen. Der folgende Code zeigt, warum dies eine gute Idee ist, da anscheinend eine varnach dem Wird eine Variable verwendet, wird sie undefiniert.

Kann mir aber jemand sagenWarum das ist der Fall?

<html>
    <head>
        <script type="text/javascript">
            window.onload = function() {
                var a=1;
                function foo() {
                    //a = 2; //outputs 2,2 because this overwrites the external variable value
                    //var a = 2; //outputs 2,1 because the "var" keyword creates a second variable with local scope which doesn't affect the external variable 
                    console.log(a);
                    var a = 3; //ouputs "undefined,1" ???
                }
                foo();
                console.log(a);
            };
        </script>
    </head>
    <body>

    </body>
</html>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage