• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaScript - Zmienna pętli jako parametr funkcji.

Object Storage Arubacloud
0 głosów
201 wizyt
pytanie zadane 9 grudnia 2015 w JavaScript przez Tricker Bywalec (2,630 p.)

Dzień dobry,

Mam problem z pętlą, której zmienna jest parametrem funkcji...
Nie wiem czy dobrze wytłumaczyłem o co mi chodzi, więc po prostu wstawiam kod.

Mam coś takiego:

Slider1.nav[0].onclick = function (){
    Slider1.SlideTo(0);
}
Slider1.nav[1].onclick = function (){
    Slider1.SlideTo(1);
}
Slider1.nav[2].onclick = function (){
    Slider1.SlideTo(2);
}
Slider1.nav[3].onclick = function (){
    Slider1.SlideTo(3);
}
Slider1.nav[4].onclick = function (){
    Slider1.SlideTo(4);

Chcę uzyskać:

for (i=0; i<5; i++) {
    Slider1.nav[i].onclick = function (){
    Slider1.SlideTo(i);
    }
} 

Problem jest taki, że nie dociera do function, tzn. po prostu jest niezdefiniowane.
Ma ktoś jakiś pomysł jak się z tym uporać?

http://stackoverflow.com/questions/3023874/arguments-to-javascript-anonymous-function
Znalzłem taki temat, w którym jedna z odpowiedzi +/- tłumaczy moje rozwiązanie, jednak nie bardzo go rozumiem, przez co nie jestem w stanie tego zastosować.

1 odpowiedź

+1 głos
odpowiedź 9 grudnia 2015 przez Comandeer Guru (601,110 p.)
wybrane 9 grudnia 2015 przez Tricker
 
Najlepsza

Po przeleceniu pętli i będzie miało swoją końcową wartość i to właśnie ona jest przekazywana dalej.

Dlatego w pętlach najlepiej używać albo IIFE:

for ( var i = 0; i < 5; i++ ) {
	( function( i ) {
		Slider1.nav[i].onclick = function (){
		Slider1.SlideTo(i);
	}( i ) )
} 

albo let:

for ( let i = 0; i < 5; i++ ) {
	Slider1.nav[i].onclick = function (){
	Slider1.SlideTo(i);
} 

 

komentarz 9 grudnia 2015 przez Tricker Bywalec (2,630 p.)

Dzięki wielkie za pomoc, sposób pierwszy rzeczywiście działa! :)

for (var i=0; i<5; i++){
    (function(i){
        Slider1.nav[i].onclick = function(){
            Slider1.SlideTo(i);
        }
    }(i));
}

Co do drugiego, to niestety, ale Chrome go jeszcze nie obsługuje;

Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode

komentarz 9 grudnia 2015 przez Comandeer Guru (601,110 p.)

Obsługuje w strict mode ;) Faktycznie, zapomniałem o tym, bo wszystkie skrypty mam w strict mode:

"use strict";
//itd.

Z tym, że jeśli nie masz dobrej jakości JS-a, to może się okazać, że przestanie działać ;)

komentarz 9 grudnia 2015 przez Tricker Bywalec (2,630 p.)
edycja 9 grudnia 2015 przez Tricker
Faktycznie, działa. :)

Hm. Uczę się JSa już od 2-3 miesięcy i przyznam, że dopiero teraz spotkałem się z pojęciem strict mode...
Lepiej późno niż wcale :D

Podobne pytania

0 głosów
1 odpowiedź 406 wizyt
pytanie zadane 10 października 2021 w JavaScript przez lysywilkoklak Początkujący (290 p.)
0 głosów
2 odpowiedzi 506 wizyt
pytanie zadane 19 października 2017 w JavaScript przez KerberosKam Nowicjusz (130 p.)
0 głosów
2 odpowiedzi 217 wizyt
pytanie zadane 1 czerwca 2017 w JavaScript przez crova Użytkownik (940 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...