2014-12-30 12 views
7

W ramach nauki JavaScript próbuję napisać kod, aby zademonstrować koncepcję, której się uczę; dzisiaj uczę się zmiennych podnoszonych. Oto kod pisałem:Dlaczego moja JavaScript jest podnoszona zmienna lokalna zwracająca undefined, ale zmienna globalna hoisted zwraca puste?

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); 

Spodziewałem następujące wyniki:

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

Jednak podczas testowania mojego kodu na WriteCodeOnline.com aw innej piaskownicy, pierwsze console.log wyświetlacze A: My name is. Używam przeglądarki Chrome, jeśli to robi różnicę.

Moje pytanie brzmi: dlaczego zmienna lokalna wewnątrz funkcji zwraca undefined, podczas gdy zmienna globalna hoisted zwraca wartość pustą?

+0

wydaje się, że kolejne pytanie istnieje, że odpowiada na moje pytanie. Gdybym znał odpowiedź na moje pytanie, prawdopodobnie byłbym w stanie znaleźć również inne pytanie. Nie mam problemu, jeśli to pytanie jest zamknięte. – JimLockwood

Odpowiedz

7

To, co się tutaj dzieje, to dostęp do window.name.

To predefiniowane nieruchomość na window, więc podniósł var name rzeczywistości nie jest stworzenie nowej zmiennej. Jest już jeden w zasięgu globalnym z tą nazwą i domyślnie ma pustą wartość ciągu.

Aby obserwować zachowanie się spodziewałeś, możesz użyć zmiennej nazwę inną niż name, lub umieścić kod wewnątrz funkcji:

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

Dobrze jest wiedzieć, że moje oczekiwania były słuszne. Teraz wracamy do nauki, że słowa kluczowe itp. Nie mogą być używane jako nazwy zmiennych. – JimLockwood

+2

@JimLockwood Naszym ważnym celem jest utrzymanie identyfikatorów poza zasięgiem globalnym. :) – JLRishe

+1

@RobG Czy nie masz na myśli '" nazwa "w oknie'? – fgb

Powiązane problemy