![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 1.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, próbuję załapać domknięcia w JS, o to problemik
Program który będzie wywoływany foo(); będzie "zliczał" ilość wywołań bez użycia zmiennej globalnej ani argumentu w funckji więc jeśli wywołamy go foo(); foo(); alert(foo()); to da nam 3 i naskrobałem coś takiego Kod var increment = function() { var i = 0; return function() { return i += 1;}(); }; alert(increment()+" "+increment()); (tak wiem, że to się zeruję) Póki co stoję poetycko to ujmując "jak widływ gnoju". Wszelkie sugestie mile widziane |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 106 Pomógł: 18 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Taki zapis funkcji: (function(y){//y == x})(x) automatycznie ją wyzwala bez jej zapisywania.(pewnie ci się to przyda kiedyś) Chyba rozwiałem wątpliwości w tym temacie? Ten post edytował wszerad 1.09.2011, 21:47:44 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Podstawą działania takich funkcji jest sposób ustalania początkowej wartości zmiennej (opiszę to dokładniej w kodzie poniżej). Po drugie nie rozumiem, co chcesz osiągnąć zwracając w swojej funkcji wynik działania jakiejś funkcji anonimowej, to raczej nie tędy droga. Problem z domknięciami ma niewiele wspólnego, chodzi tutaj raczej o zasymulowanie zmiennej statycznej w JS.
@wszerad Nie chodzi o to, że taki zapis funkcję wyzwala, ale chodzi o to, że wewnątrz ciała tej funkcji mamy ograniczony zasięg zmiennych tylko do ciała tej funkcji. Powoduje to, że możemy bezpieczniej używać zmiennych do niej przekazanych. Takie coś do poczytania, choć to niewiele, jeśli chodzi o domknięcia. Ten post edytował mortus 1.09.2011, 22:00:33 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 1.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
wielkie dzięki, zmylono mnie gdyż powiedziano mi iż problem to domknięcie, bardzo dziękuje za sensowne wyjaśnienie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 106 Pomógł: 18 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
"Nie chodzi o to, że taki zapis funkcję wyzwala" to była tylko taka ciekawostka poza tematem:D
Troche lipnie, że this odwołuje się do obiektu globalnego zamiast do obiektu funkcji. Dobra mam coś innego: var a = function(){alert(arguments.callee.a);}; a.a = 'ok'; a(); -> 'ok' |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 1.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
a takie jeszcze pytanie do wywołania funkcji
function (){ return x}(); nawiasy końcowe są by automatycznie się wykonała, a po co wyżej podałeś tam x oraz co i poco tam podawać. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 106 Pomógł: 18 Dołączył: 11.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Musisz taką funkcje brać w nawias, deklaracja obiektu to jeszcze nie obiekt (podobnie jest z new Date() itp), kiedy zmiennej przypisujesz funkcje var foo = function(){} czy function foo(){} to wywołanie jej uzyskujesz przez foo(), tak samo jest tu, nawias na końcu to arrgumenty jakie przekazujesz do funkcji.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 15:17 |