2016-03-23 18 views

Antwort

1
var regular = 'regular is assigned'; 

function prison() { 
    console.log(regular); 
    //var regular; 
} 
prison(); 

Ursache ist der Kommentar gesetzt Schlüsselwort.

Javascript verschieben Sie alle Variablen an den Anfang, bevor Sie Code ausführen.

In Ihrem Fall lokale Variable regular gedruckt wird stattdessen erklärt erste regular Variable .. Documentation

So Ihr Code ausgeführt wird wie folgt

var regular = 'regular is assigned'; 

function prison() { 
    var regular;//Moved here as per JS Scope 
    console.log(regular);//Hence it is undefined 
} 
prison(); 
1

Ihre Funktion die Variable neu definiert. Es spielt keine Rolle, dass dies unter dem console.log Aufruf ist - es wird immer für den vollen Umfang neu definiert.

2

Dies ist ein Bereichsproblem. Innerhalb Ihrer Funktion haben Sie einen neuen Bereich erstellt. Javascript hebt die variable Deklaration auf die obere Funktion. Da die Variable keinen Wert hat, lautet sie undefined. Die im Fenster erstellte Variable regular existiert nicht im Gültigkeitsbereich der Funktion.

1

Was Sie sehen, ist das Heben. Obwohl Sie die Variable nach der Verwendung deklariert haben, wird die Variablendeklaration an den Anfang der Funktion verschoben. Wie Sie erwarten würden, überschreiben lokale Variablen globale Variablen und sind daher nicht definiert.

Nehmen Sie das folgende Beispiel:

function hoist(num){ 

    message = "I'm not five" 

    if(num === 5) 
    { 
     var message = "I am five"; 
    } 
    console.log(message); 

} 

hoist(5); 

console.log(message); 

Die conosle.log nach Aufruf der Funktion eine Ausnahme auslöst. Ohne Hochfahren würde die erste Zuweisung an die Variable message eine globale Variable erzeugen, tut dies aber nicht. Die Variablendeklaration wird nach oben verschoben, sodass die Zuweisung zur Nachricht in der lokalen Variablen erfolgt und keine globale Deklaration erstellt wird.

https://jsfiddle.net/Ldbhtv3v/

Verwandte Themen