2013-05-11 17 views
8

Pisałem następujący fragment kodu:Co tu dzieje się z zakresem JavaScript?

var f = function() { document.write("a"); }; 

function foo() { 
    f(); 

    var f = function() { document.write("b"); }; 
} 

foo(); 

Spodziewałem funkcję, która drukuje a się nazywać, ale zamiast tego daje błąd wykonania o wywołanie wartość undefined. Dlaczego to się dzieje?

+0

Zjawisko to jest z pewnością szczegółowo opisane w każdej początkowej książce JavaScript, nie wspominając już o niezliczonych tutorialach dla początkujących i pytaniach dotyczących StackOverflow. Trudno zrozumieć, dlaczego ludzie wciąż na tym polegają. –

Odpowiedz

0

Odtąd (podobnie jak w java) nie musisz się martwić kolejnością definiowania rzeczy w pliku. Kiedy na nowo zdefiniujesz zmienną f, ona wypakowuje inną wersję f, ale nie jest zdefiniowana, dopóki nie zostanie wywołana f, więc otrzymasz błąd.