zakres zmiennej zadeklarowanej z var
jest cała funkcja, w której jest on ogłosił, że nie rozpocznie się w momencie deklaracji. Jest często opisywany jako variable declaration hoisting i może być postrzegany jako ruch wszystkich deklaracji zmiennych na początku funkcji. W przypadku definicji funkcji zarówno deklaracja, jak i "przypisanie" są przenoszone razem.
function b() {
a = 10;
function a() {}
}
jest równoważna
function b() {
var a = function() {};
a = 10;
}
co oznacza zadeklarować nową zmienną a
, oraz oświadczenie a = 10
zmienia tylko wewnętrzna zmienna a
, a nie jeden zewnętrzny. Mówimy, że wewnętrzna zmienna przyciemnia zewnętrzną.
W drugim przypadku nie ma zmiennej a
w zakresie wewnętrznym, co oznacza, że zewnętrzna jest używana i zmieniana (podczas wyszukiwania zmiennej przechodzimy z zakresu wewnętrznego do najbardziej zewnętrznego po łańcuchu zamknięcia) .
Arrgh, ten przykład jest tak powszechny, że można nawet umieścić pełny kod w ulubionej wyszukiwarce i uzyskać przydatne wyniki ... – Bergi