2016-10-12 29 views
6

Uczę się zmiennych globalnych i lokalnych JS, ale jestem zdezorientowany w tej konkretnej funkcji.Zmienne lokalne i globalne w funkcji JavaScript

var text = "top"; 
function print() { 
    return (text); 
} 
print(); 
//returns 'top' 

Rozumiem, dlaczego powraca na górę. var text to zmienna globalna. Funkcja print() ma do niej dostęp i zwraca text, zwracając 'top'.

var text = "top"; 
function print() { 
    return (text); 
    var text = "bottom"; 
} 
print(); 
// returns undefined 

Posiadam podstawową wiedzę o zmiennych globalnych i lokalnych (lub tak mi się wydawało). Wiem, że funkcja print ma dostęp do własnych lokalnych i globalnych zmiennych.

Nie rozumiem, dlaczego to zwraca undefined. Według mojej wiedzy, linia return text; wyszukuje globalną zmienną text, do której ma dostęp (jak pokazano na pierwszym bloku kodu). Po zwrocie text = 'top' deklaruje również własną zmienną lokalną o tej samej nazwie, ale innej wartości, 'bottom'. Lokalna zmienna bottom, według mojej wiedzy, powinna tam siedzieć, ponieważ nie została wcześniej wywołana.

Dlaczego nie pokazano top (lub nawet pokazuje bottom), ale zamiast tego pokazuje undefined?

+0

No. W drugim przypadku, zwraca tekst zmiennej lokalnej , który jest * deklarowany * wewnątrz funkcji. (To właśnie sprawia, że ​​jest lokalny.) Ale w momencie, gdy powrót jest wykonywany, zmienna nie ma jeszcze przypisanej wartości. –

+4

Sprawdź "zmienne podnoszenie" w JavaScript. –

Odpowiedz

6

JavaScript dźwigu, to zmienna oświadczenie takie, że kod jest funkcjonalnie następujące:

var text = "top"; 
function print() { 
    var text; 
    return (text); 
    // unreachable code below 
    text = "bottom"; 
} 
print(); 
// returns undefined 

Od text zadeklarowana w funkcji nie jest jeszcze określona, ​​gdy trafisz return(text) i text="bottom" jest nieosiągalny, print() powraca undefined

Więcej informacji na stronie What is the scope of variables in Javascript. To pytanie dotyczy przypadku 7.

-1

Twoje zadanie:

var text = "bottom"; 

przychodzi po powrotną więc to nie jest właściwa, to jest nieosiągalny oświadczenie

var text = "top"; 
 
function print() { 
 
    return (text); 
 
    //var text = "bottom"; 
 
    //the above assignment comes after a return function 
 
    //so it is not proper, it is unreachable statemen 
 
} 
 
alert(print()); 
 
// returns undefined

+0

Aby ponownie przypisać wartość "bottom" do tekstu, musi ona wystąpić przed instrukcją return, aby była dostępna. – Po10cio

2

to zrobić z variable hoisting

kod w swoim drugim przykładzie jest wykonywana w następującej kolejności:

  1. Zadeklaruj zmienną globalną text
  2. Ustaw wartość globalnej zmiennej text do "top"
  3. Declare funkcja print
  4. funkcja połączeń print
  5. Zadeklaruj zmienną lokalną text (ze względu na podnoszenie)
  6. Wartość zwracana zmiennej lokalnej text (undefined w tym momencie)
  7. wartość Zestaw zmiennej lokalnej text na „dolny”

To jest wykonywany tak, jakby były napisane tak:

var text = "top"; 
function print() { 
    var text; 
    return (text); 
    text = "bottom"; 
} 
print(); 

Jak widać, wartość text jest zwracana przed faktycznym zdefiniowaniem, a zatem jest to undefined.

0

Wynika to z hostingu.

podnoszący naucza, że ​​deklaracje zmiennych i funkcji są fizycznie przeniósł się do góry Twój kodowania

można uzyskać próbki i wyjaśnienia here