Domkniecia - dlaczego zmienna nie zeruje się za każdym razem

0
			function makeCounter() {
				var count = 0;
			
				function counter() {
					count = count + 1;
					return count;
				}
				return counter;
			}
			var doCount = makeCounter();
			console.log(doCount());
			console.log(doCount());
			console.log(doCount());

Dlaczego tylko raz count ustawia się na 0, a potem kolejno wywołując funkcję doCount ta zmienna się nie zeruje ? Od razu wchodzimy do funkcji counter ?

0

makeCounter() zwraca funkcję counter(), czyli wywołania doCount() wywołują po prostu counter().

0

tak myślałem ale nie byłem pewien

0

Ta funkcja counter() później ma dostęp do środowiska makeCounter() ? przez co wie jaka jest na początku wartość zmiennej count ?

1

Tak, na tym właśnie polega domknięcie - funkcja ma dostęp do swojego lexical scope'a nawet gdy jest wywoływana poza nim. Nawet robiłem na ten temat prezentację ostatnio, nie mam nagrania, ale może slajdy Ci coś pomogą: http://www.slideshare.net/brainhubpl/lexical-scope-function-vs-block-scope-hoisting-scope-closures

1 użytkowników online, w tym zalogowanych: 0, gości: 1