[JavaScript]dlaczego ta funkcja działa? |
[JavaScript]dlaczego ta funkcja działa? |
27.01.2017, 04:30:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 15.09.2016 Skąd: Warszawa Ostrzeżenie: (0%) |
|
|
|
27.01.2017, 08:28:13
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Bo użyłeś samo-wykonującej się funkcji która stworzyła scope i ustawiła w tym scopie zmienną która później jest inkrementowana: http://imgur.com/7jNfTQ5
EDIT: stworzyłeś swego rodzaju prywatną zmienną, ale z racji że funkcja się wykonała sama, została zainicjalizowana tylko raz dzięki czemu scope wciąż istnieje i posiada wcześniej przypisane wartości. Ten post edytował by_ikar 27.01.2017, 08:29:21 |
|
|
27.01.2017, 17:10:34
Post
#3
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 15.09.2016 Skąd: Warszawa Ostrzeżenie: (0%) |
czyli scope nie jest zdjęciem zmiennej (z linii nr2) z momentu likwidowania zewnętrznej funkcji, tylko nową zmienną z tą samą nazwą z początkowo przypisaną wartością z momentu likwidowania zewnętrznej funkcji. e?
Ten post edytował porzeczki 27.01.2017, 17:11:31 |
|
|
27.01.2017, 18:08:14
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
czyli scope nie jest zdjęciem zmiennej (z linii nr2) z momentu likwidowania zewnętrznej funkcji, tylko nową zmienną z tą samą nazwą z początkowo przypisaną wartością z momentu likwidowania zewnętrznej funkcji. e? Cokolwiek by to nie znaczyło... Zmienna jest deklarowana przy każdym wywołaniu funkcji na nowo. Pomimo nazwy jest to inna zmienna, bo jest deklarowana w ciele funkcji. Możesz użyć zmiennej globalnej, albo jakiejkolwiek zadeklarowanej poza ciałem ten funkcji (w wyższym scope) lub użyć czegoś w rodzaju zmiennej statycznej:
-------------------- |
|
|
27.01.2017, 18:18:08
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Scope jest wszystkim pomiędzy klamrami. Dlatego w moim poprzednim screenie rozwinąłem sekcje [[Scopes]] w której znajduje się counter z przypisaną mu wartością. Wyobraź to sobie tak. W gobal scope możesz sobie zdefiniować zmienną która ci nie znika, tutaj ma miejsce podobna sytuacja, stworzyłeś sobie taką przestrzeń i przypisałeś ją do zmiennej. Wówczas w pamięci zostaje ta zmienna która jest później wykorzystywana, do czasu aż wszystkie jej odwołania nie zostaną usunięte lub garbage collector tego nie usunie.
|
|
|
27.01.2017, 19:20:30
Post
#6
|
|
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 15.09.2016 Skąd: Warszawa Ostrzeżenie: (0%) |
ok. W poprzednim pytaniu:
Cytat czyli scope nie jest zdjęciem zmiennej (z linii nr2) z momentu likwidowania zewnętrznej funkcji, tylko nową zmienną z tą samą nazwą z początkowo przypisaną wartością z momentu likwidowania zewnętrznej funkcji. e? chodziło mi o to że...(o tym na końcu) Z tego przykładu o closure:
jest obrazek z którego można rozumieć, że do scope jest przenoszona zmienna z linii nr 2 razem z jej wartością, i że kolejne wywołania getDelay() odnoszą się do tej zmiennej. Dlatego w pytaniu chodziło mi o to czy scope przechowuje zdjęcie (fotografię) tej zmiennej. Ale już rozumiem, że w scope jest nowa, z tą samą nazwą, prywatna zmienna, którą można modyfikować i która zostaje w pamięci. Ten post edytował porzeczki 27.01.2017, 19:24:06 |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 21:02 |