2014-12-30 4 views
7

Als Teil meines JavaScript-Lernens versuche ich Code zu schreiben, um das Konzept zu demonstrieren, das ich lerne; Heute lerne ich hochgezogene Variablen. Hier ist der Code, den ich schrieb:Warum wird meine JavaScript-gehostete lokale Variable nicht definiert zurückgeliefert, aber die hochgezogene globale Variable wird leer?

console.log("A: My name is " + name); 

function happy() { 
    console.log ("1: I am " + feeling); 
    var feeling = "happy"; 
    console.log ("2: I am " + feeling); 
} 
happy(); 

var name = "Jim"; 
console.log("B: My name is " + name); 

ich die folgenden Ergebnisse erwartet:

A: My name is undefined 
1: I am undefined 
2: I am happy 
B: My name is Jim 

jedoch bei der Prüfung von meinem Code in WriteCodeOnline.com und in einer anderen Sandbox, der erste console.log Displays A: My name is. Ich verwende einen Chrome-Browser, wenn dies einen Unterschied macht.

Also, meine Frage ist, warum gibt die gehobene lokale Variable innerhalb der Funktion undefined zurück, während die hochgezogene globale Variable ein Leerzeichen zurückgibt?

+0

Es scheint, dass eine andere Frage besteht, dass beantwortet meine Frage. Hätte ich die Antwort auf meine Frage gewusst, hätte ich wahrscheinlich auch die andere Frage finden können. Ich habe kein Problem, wenn diese Frage geschlossen ist. – JimLockwood

Antwort

7

Was hier passiert ist, dass Sie auf window.name zugreifen.

Dies ist eine vordefinierte Eigenschaft auf window, so dass Ihre gehobene var name nicht tatsächlich eine neue Variable erstellt. Es gibt bereits einen Namen im globalen Gültigkeitsbereich mit diesem Namen, und standardmäßig hat er einen leeren Zeichenfolgenwert.

das Verhalten zu beobachten, das Sie erwarten, können Sie einen Variablennamen andere verwenden als name oder Ihren Code in einer Funktion setzen:

function hoisting() { 
 
    console.log("A: My name is " + name); 
 

 
    function happy() { 
 
    console.log ("1: I am " + feeling); 
 
    var feeling = "happy"; 
 
    console.log ("2: I am " + feeling); 
 
    } 
 
    happy(); 
 

 
    var name = "Jim"; 
 
    console.log("B: My name is " + name); 
 
} 
 

 
hoisting();

+0

Nun, es ist gut zu wissen, dass meine Erwartungen richtig waren. Jetzt zurück zu lernen, dass Schlüsselwörter, etc. nicht als Variablennamen verwendet werden können. – JimLockwood

+2

@JimLockwood Der wichtige Weg hier ist, Ihre Identifikatoren außerhalb des globalen Geltungsbereiches zu halten. :) – JLRishe

+1

@RobG Meinst du nicht "name" im Fenster? – fgb