2016-04-27 11 views
0

Im folgenden Code:verschachtelte Funktion verlieren variablen Referenz

function outer() { 
    var x = 'foo'; 

    function inner() { 
    var y = x;  // y == 'foo' 
    var x = 'bar'; // x == 'bar', y == undefined 
    } 
} 

Warum wird die Variable y innerhalb inner() nicht definiert werden? sollte es sich nicht beziehen auf x in outer()? Wenn die Zeile var x = 'bar'; entfernt wird, hat y tatsächlich den Wert 'foo'.

+6

Es heißt Heben. –

Antwort

2

Die inner Funktion interpretiert wird, als ob es so geschrieben wurden:

function inner() { 
    var y; 
    var x; 
    y = x;  // y == undefined 
    x = 'bar'; // x == 'bar' 
    } 

Die Erklärungen sind hochgezogen, aber die Initialisierungen werden von oben nach unten abgearbeitet. In der gesamten Funktion inner beziehen sich die Symbole x und y beide auf die Variablen lokal in dieser Funktion; insbesondere x ist die lokale x, nicht die im umschließenden Kontext. Wenn der Initialisierungsausdruck für y ausgewertet wird, ist daher x der lokale x, der noch nicht initialisiert wurde; Sein Initialisierungsausdruck kommt nach der Initialisierer für y.

+0

Downvoter, lassen Sie es mich wissen, wenn es etwas gibt, das ich ausführlicher erklären kann. – Pointy

Verwandte Themen