2016-04-26 7 views
2

Ich habe ein Problem mit einem lokalen Bereich. Das zweite console.log zeigt keinen "a" -Wert, aber zeigt undefined an. Warum?Warum bezieht sich ein lokaler Bereich nicht auf eine globale Variable?

"use strict" 

console.log(a); //undefined 
var a = "a"; 
function b(){ 
    console.log(a); // why is undefined here? 
    var a = "a1"; 
    console.log(a); // here is "a1" 
} 
b(); 
+0

Entfernen Sie die zweite 'var' zu _assign_ einen Wert für die globale 'var a' statt für _redeclare_ it. –

+0

var a innerhalb einer Funktion ist auch ein globaler Bereich .. warum Sie beide erklären .. – nisar

+0

Wenn Ihr Bruder und Freund beide "Bob" genannt werden, müssen Sie genauer auf eine Autofahrt mit beiden sein. – dandavis

Antwort

1

Object-Oriented JavaScript, 2nd Edition: Wenn Ihr JavaScript Programmausführung eine neue Funktion tritt, alle Variablen überall bewegt werden in der Funktion deklariert (oder erhöhtem oder gehisst) an die Spitze der Funktion. Dies ist ein wichtiges Konzept, das zu beachten ist. Weiterhin wird nur die Deklaration gehisst, dh nur die Anwesenheit von die Variable wird nach oben verschoben. Irgendwelche Aufgaben bleiben wo sie sind. Im obigen Beispiel wurde die Deklaration der lokalen Variablen a auf hochgezogen.

var a = 123; 

function f() { 

    var a; // same as: var a = undefined; 

    alert(a); // undefined 

    a = 1; 

    alert(a); // 1 
} 
3

JS wird Ihr Code verarbeiten wie:

"use strict" 

var a; // undefined 
console.log(a); //undefined 

a = "a"; 

function b(){ 
    var a; // undefined 

    console.log(a); // all is clear, LOCAL variable a is undefined. 

    a = "a1"; 
    console.log(a); // here is "a1" 
} 

b(); 

mehr über here Hebe lesen.

Sie können auch über Function declaration hoisting lesen, das ist ein wichtiger Teil der JavaScript-Grundlagen zu.

0

Hochladen ist das Standardverhalten von JavaScript zum Verschieben von Deklarationen nach oben. Sie haben eine a Variable in Ihrem Funktionsumfang. Dies ist, wie es aussieht, wenn Sie es sind Ausführung:

"use strict" 

console.log(a); //undefined 
var a = "a"; 
function b(){ 
    var a; 
    console.log(a); // Undefined because a is not set 
    a = "a1"; 
    console.log(a); // here is "a1" 
} 
b(); 
0

Denn Sie haben eine andere Variable eine Funktion b definiert, so dass es wie folgt aus:

function b() { 
    var a; 
    console.log(a); 
    a = "a1"; 
    console.log(a); 
}