Javascript pokreće funkciju u for petlji. Ciklusi i iteracije. Prekidanje for petlje

Ciklusi vam omogućavaju da izvršite neku radnju mnogo puta, ovisno o određenim uvjetima. JavaScript ima sledeće vrste ciklusi:

    za..in

    dok

    uradi..dok

za petlju

Petlja for ima sljedeću formalnu definiciju:

Za ([inicijalizacija brojača]; [uvjet]; [promjena brojača])( // akcije)

Na primjer, koristimo for petlju za iteraciju preko elemenata niza:

Ispravni ciklusi - odraz stvarnosti

Ovako napisane, dvije petlje izgledaju vrlo slično. Jedina stvar koja se stvarno mijenja između njih je pozvana funkcija i početna vrijednost. Oba reduciraju niz na jednu vrijednost. Stoga ćemo kreirati funkciju redukcije kako bismo inkapsulirali ovaj obrazac.

Dakle, ne moramo pisati svoje ako ne želimo. Koristeći inline metodu, naš kod postaje. Sada, ako pažljivo pazite, možda ste primijetili da ovaj kod nije mnogo kraći. Koristeći ugrađene metode niza, pohranjujemo samo jedan red. Ako koristimo našu funkciju ručnog skraćivanja, tada je kod duži. Ali naš cilj je smanjiti složenost, a ne pisati kraći kod. Dakle, jesmo li smanjili složenost? Odvojili smo kod za petlju od koda koji obrađuje pojedinačne elemente.

Var ljudi = ["Tom", "Alice", "Bob", "Sam"]; for(var i = 0; i "); }

Prvi dio deklaracije petlje - var i = 0 - kreira i inicijalizira brojač - varijablu i. I prije nego što se petlja izvrši, njena vrijednost će biti jednaka 0. U stvari, ovo je isto kao deklariranje varijable.

Drugi dio je uvjet pod kojim će se petlja izvršiti. U ovom slučaju, petlja će se izvoditi sve dok vrijednost i ne dostigne vrijednost jednaku dužini niza ljudi. Možete dobiti dužinu niza koristeći svojstvo dužine: people.length.

Beskonačna for petlja

Funkcija skupljanja može izgledati prilično primitivno na prvi pogled. Većina primjera smanjenja radi prilično jednostavne stvari poput zbrajanja brojeva. Ali ništa ne kaže da povratna vrijednost za stenografiju mora biti primitivan tip. To može biti objekt ili čak drugi niz. Tako možemo, na primjer, napisati kartu ili filter koristeći stenografiju. Imamo mapu da uradimo nešto sa svakim elementom u nizu. I smanjili smo da svedemo niz na jednu vrijednost.

Ali šta ako želimo da izdvojimo samo neke elemente u nizu? Za daljnje proučavanje, proširit ćemo našu bazu podataka o herojima kako bismo dodali neke dodatne podatke. Sada recimo da imamo dva problema. Pronađite sve ženske heroje; i pronađite sve heroje sa više moći. . Ali definitivno imamo obrazac koji se ponavlja. Koristimo predikat da odlučimo hoćemo li pohraniti svaki element u heroje. Način na koji smo ovdje napisali čini kod duži. Ali sada kada smo definirali naše predikatne funkcije, ponavljanje postaje jasnije.

Treći dio je povećanje brojača za jedan.

A pošto postoje 4 elementa u nizu, blok petlje će se pokrenuti 4 puta dok vrijednost i ne postane jednaka people.length (tj. 4). I svaki put će se ova vrijednost povećati za 1. Svaka zasebna iteracija petlje naziva se iteracija. Dakle, u ovom slučaju će raditi 4 iteracije.

A uz pomoć izraza people[i], možemo dobiti element niza za njegov naknadni prikaz u pretraživaču.

Možemo ga izdvojiti u funkciju. Dakle, ne moramo pisati vlastitu verziju. Koristeći metode niza, naš kod postaje. Pa razmislite kako ćemo to koristiti u praksi. Kada primijetimo da ovaj problem možemo riješiti pomoću filtera, naš zadatak postaje lakši. Sve što treba da uradimo je da odredimo filter koji treba da sačuvamo. To radimo pisanjem jedne vrlo male funkcije. Zaboravljamo na nizove i radne varijable. Umjesto toga, pišemo sićušnu sićušnu predikatsku funkciju.

nastavak i prekid izjava

I, kao i kod drugih naših iteratora, korištenje filtera prenosi više informacija na manje prostora. Ne moramo čitati sav uobičajeni kod petlje da bismo razumjeli šta filtriramo. Umjesto toga, napisano je pravo u pozivu metode. Ali šta ako želimo da pronađemo jednog heroja? Mogli bismo koristiti filter da je pronađemo, na primjer.

Brojač nije potrebno povećavati za jedan, s njim možete izvršiti druge radnje, na primjer, smanjiti ga za jedan:

Var ljudi = ["Tom", "Alice", "Bob", "Sam"]; for(var i = people.length - 1; i >= 0; i--)( document.write(people[i] + "
"); }

U ovom slučaju, niz se prikazuje od kraja, a iteracija niza počinje od i = 3 do i = 0.

za..in

Petlja for..in je dizajnirana za ponavljanje nizova. Njegova formalna definicija je:

Ogromne kombinacije jednostavnih algoritama

Problem je što nije baš efikasan. Metoda filtera gleda na svaki element u nizu. Ali znamo da postoji samo jedna Crna udovica, i možemo prestati pratiti kako smo je pronašli. Ali ovaj pristup upotrebe predikatske funkcije je uredan.

Još jednom, na kraju izražavamo više informacija na manje prostora. Koristeći našu pretragu, naš zadatak pronalaženja određenog unosa svodi se na samo jedno pitanje: Kako da znamo da li smo pronašli ono što želimo? Ne moramo da brinemo o detaljima kako se iteracija dešava.

Za (indeks u nizu) ( // akcije)

Na primjer, hajde da ponovimo elemente niza:

Var ljudi = ["Tom", "Alice", "Bob", "Sam"]; for(indeks var u ljudima)(document.write(ljudi + "
"); }

while petlja

Dok petlja se izvršava sve dok je neki uslov istinit. Njegova formalna definicija je:

Dok(uvjet)( // radnje)

Opet, prikazujemo elemente niza koristeći while:

Ove funkcije iteracije su odličan primjer zašto su apstrakcije tako korisne i elegantne. Recimo da koristimo ugrađene metode niza za sve. U svakom slučaju, uradili smo tri stvari. Struktura kontrole petlje je eliminisana, tako da je kod koncizniji i lakši za čitanje; Opisuje predložak koji koristimo, koristeći odgovarajući naziv metode. Smanjena je gnjavaža oko obrade čitavog niza da jednostavno odredimo šta želimo da radimo sa svakim elementom. Odnosno, mapirajte, smanjite, filtrirajte ili pretražite. . Imajte na umu da je u svakom slučaju problem riješen u rješenjima koja koriste male, čiste funkcije.

Var ljudi = ["Tom", "Alice", "Bob", "Sam"]; var indeks = 0; while(indeks< people.length){ document.write(people + "
"); index++; )

Dok petlja ovdje će se izvršavati sve dok vrijednost indeksa ne postane jednaka dužini niza.

uradi..dok

U do petlji prvo se izvršava kod petlje, a zatim se provjerava uvjet u naredbi while. I dok je ovaj uslov tačan, ciklus se ponavlja. Na primjer:

A kada eliminišemo petlje, smanjujemo složenost i kreiramo kod koji se više održava. Nekoliko ljudi je istaklo da je neefikasno ponavljati listu heroja dva puta u primjerima smanjenja i filtriranja. Ovo je malo složenije od verzije u kojoj ponavljamo dva puta, ali može napraviti veliku razliku ako je niz ogroman.

Kada nešto kodirate, bit će trenutaka kada želite ponoviti radnju ili pokrenuti više puta više puta. Jedan od načina da to učinite je da jednostavno pozovete funkciju 10 puta pomoću kopiranja i lijepljenja. Duplikat koda nikada nije dobra ideja.

Var x = 1; do(document.write(x * x + "
"); x++; )while(x< 10)

Ovdje će se kod petlje pokrenuti 9 puta dok x ne postane 10. U ovom slučaju, do petlja garantuje najmanje jedno izvršenje akcija, čak i ako uslov u iskazu while nije istinit.

nastavak i prekid izjava

Ponekad je potrebno izaći iz petlje prije nego što se završi. U ovom slučaju možemo koristiti naredbu break:

Sada, čak i ako odlučite da ručno duplicirate neki kod nekoliko puta, ovaj pristup teško da funkcionira u praksi. Koliko puta ćete morati da duplicirate kod ovisit će o nekom vanjskom faktoru kao što je broj elemenata u skupu podataka, neki rezultat poziva web usluge, broj slova u riječi i razne druge stvari koje će promijeniti. Oduvijek je bio fiksni broj, na primjer 10. Ne želite nešto kopirati i zalijepiti stotine ili hiljade puta da biste nešto ponovili.

Potrebno nam je opšte rešenje za ponavljanje koda sa kontrolom koliko puta se kod ponavlja. Postoje tri vrste petlji koje možete kreirati. Svaka od ove tri opcije petlje vam omogućava da odredite kod koji želite da ponovite i način da zaustavite ponavljanje kada se ispuni uslov. U sljedećim odjeljcima saznat ćete sve o njima.

< array.length; i++) { if (array[i] >10) prekid; document.write(niz[i] + "
"); }

Ova petlja prolazi kroz sve elemente niza, ali posljednja četiri elementa neće biti prikazana u pretraživaču jer će provjera if (niz[i] > 10) prekinuti petlju naredbom break kada iteracija niza dostigne element 12 .

Ako samo želimo preskočiti iteraciju, ali ne i izaći iz petlje, možemo koristiti naredbu nastavak:

Petlja s postuvjetom

Vjerovatno nema puno smisla. Da bismo razjasnili ovu definiciju, pogledajmo primjer. Ako biste uneli ovaj kod unutar neke skripte i oznake za pregled u vašem pretraživaču, to biste vidjeli. Ova vrsta visoki nivo odgovara stvarnim vrijednostima iz našeg primjera.

Vrste petlji u JavaScriptu, kontrola petlje

Ove tri obojene oblasti igraju važnu ulogu u funkcionisanju vaše petlje. U prvom području definiramo početnu tačku. Polazna tačka je obično deklaracija i inicijalizacija varijable. Vrijednost koju inicijalizirate ovu varijablu je također tradicionalna.

Var niz = [ 1, 2, 3, 4, 5, 12, 17, 6, 7 ]; za (var i = 0; i< array.length; i++) { if (array[i] >10) nastaviti; document.write(niz[i] + "
"); }

U tom slučaju, ako program naiđe na broj veći od 10 u nizu, tada ovaj broj neće biti prikazan u pretraživaču.

Ciklusi su posebni izrazi koji vam omogućavaju da izvršite isti blok koda nekoliko puta. Izvršenje koda se prekida kada nastupi određeni uvjet.

Kada odredimo našu početnu tačku, u narednom regionu ćemo odrediti koliko dugo ćemo nastaviti ciklus. Do sada smo gledali našu polaznu tačku. Nedostaje krajnja oblast u kojoj opisujemo kako ići od vaše početne do tačke zaustavljanja. Naš kompletan primjer, ponovljeno ranije, izgleda ovako. U ovom trenutku, sve postaje zeleno i svaki kod unutar petlje se izvršava. U prethodnom odeljku pogledali smo jednostavnu petlju i opisali sve njene unutrašnje funkcije. Najbolje rješenje je da pogledamo još nekoliko primjera petlji, a to je ono što ćemo raditi u sljedećih nekoliko odjeljaka.

JavaScript nudi programerima nekoliko ukusa ciklusa. Razmotrimo ih detaljnije.


Petlja sa brojačem

Ciklus sa brojačem je zgodno ako neki kod treba da se izvrši strogo definisan broj puta. Ovo je vjerovatno najčešća vrsta petlje.

Petlja sa brojačem se piše ovako:

za(<выражение инициализации>; <условие>; <приращение>)
<тело цикла>

Ponekad ćete možda morati prekinuti petlju prije nego što se završi. Iako je ovaj primjer bio malo nezgodan, kada naiđete na pravi slučaj za završetak petlje, sada znate što trebate učiniti. Biće trenutaka kada želite da vaša petlja preskoči trenutnu iteraciju i pređe na sljedeću.

Za razliku od prekida, gdje se vaša petlja samo zaustavlja i vraća kući, nastavite da zaustavljate petlju i prijeđite na sljedeću iteraciju. Često ćete koristiti nastavak u rukovanju greškama kada samo želite da se petlja nastavi na sljedeći element.

Ovdje se koristi ključna riječ for. Stoga se takve petlje često nazivaju "petljama za".

Inicijalizacijski izraz se izvršava prvi i samo jednom. On dodjeljuje posebnu varijablu zvanu brojač petlje nekoj početnoj vrijednosti (obično 1). Brojač petlje broji koliko je puta izvršeno tijelo petlje - stvarni kod koji treba da se izvrši određeni broj puta.

Nema razloga zašto počinjete od 0, a zatim povećavate naviše. Možda ste čuli da ovako nešto poboljšava performanse vaše petlje. Žiri još uvijek ne zna hoće li dekrementiranje biti brže od povećanja, ali možete eksperimentirati i vidjeti da li ćete primijetiti neke prednosti u performansama.

Možete koristiti šta god želite sve dok vaša petlja na kraju dostigne tačku na kojoj može završiti. Niz je kolekcija elemenata. Imajte na umu da moj uslov koliko dugo radimo petlju uključuje dužinu niza za razliku od neke fiksne vrijednosti, kao što je također da se prvi element u nizu odnosi na broj.

Sljedeći korak je testiranje stanja. Određuje trenutak kada će se petlja prekinuti i kada će kod koji slijedi početi da se izvršava. Tipično, uvjet uspoređuje vrijednost brojača petlje sa njegovom graničnom vrijednošću. Ako se uvjet vrati istinito, tijelo petlje se izvršava, u suprotnom petlja se prekida i počinje izvršavanje koda koji slijedi nakon petlje.

Bez obzira na to, u interesu kompletnosti, pogledajmo ih oba na brzinu. Sa svakom iteracijom, naša petlja povećava vrijednost brojanja za 1. Trenutno, možda nećete vidjeti da često koristite petlje. Ako imate pitanja o ovoj ili bilo kojoj drugoj temi, najlakše je svratiti gdje će vam gomila prijateljskih ljudi na koje ćete ikada naići rado pomoći!

Pozicija JavaScripta u prostoru koda

Kolekcija može biti niz, skup, lista, prilagođeni objekt kolekcije i tako dalje. Iterator je konstrukcija koja nam omogućava da posjetimo ili ponovimo svaki element kolekcije. Evo primjera koda kako iterirati niz koristeći for petlju.

Nakon prolaska tijela ciklus izvršava se izraz inkrementa koji mijenja vrijednost brojača. Ovaj izraz obično povećava brojač (povećava njegovu vrijednost za jedan). Zatim se ponovo provjerava uvjet, izvršava se tijelo petlje, izvršava se inkrement i tako dalje, sve dok uvjet ne postane lažan.

Primjer petlje sa brojačem:

za (i = 1; i< 11; i++) {
a += 3;
b = i * 2 + 1;
}

Petlje nude brz i lak način da se nešto radi više puta. Ima ih mnogo različite vrste petlje, ali sve one u suštini rade istu stvar: ponavljaju radnju više puta. Različiti mehanizmi ciklusa nude Različiti putevi određivanje početne i krajnje tačke ciklusa. Postoje različite situacije koje se lakše rješavaju jednom vrstom petlje u odnosu na druge.

Izjava. Ovaj izraz obično inicijalizira jedan ili više brojača petlji, ali sintaksa dozvoljava izražavanje bilo kojeg stepena složenosti. Ako je izraz uvjeta potpuno izostavljen, uvjet se smatra istinitim. Aplikacija se izvršava. Da biste izvršili više naredbi, koristite blok naredbu da grupišete te izraze. Kontrola se vraća na scenu.

  • Ovaj izraz također može deklarirati varijable.
  • Izražava se izraz uvjeta.
  • Ako je vrijednost uvjeta tačna, naredbe petlje se izvršavaju.
Dajte izjavu u to vrijeme.

Ova petlja će se izvršiti 10 puta. Dodjeljujemo početnu vrijednost 1 brojaču i i povećavamo je za jedan nakon svakog izvršavanja tijela petlje. Petlja će prestati da se izvršava kada se vrijednost brojača poveća na 11 i uvjet petlje postane lažan.

Brojač petlje se može napisati u jednom od izraza tijela petlje, kao što smo i mi uradili. U našem slučaju, brojač i će sadržavati sekvencijalno rastuće vrijednosti od 1 do 10, koje se koriste u proračunima.

Prekidanje for petlje

Naredba se izvršava jednom prije provjere statusa. Ako je uslov tačan, naredba se ponovo izvršava. Na kraju svakog izvršenja, uslov se provjerava. Ako uslov postane netačan, naredba u petlji prestaje da se izvršava i kontrola prelazi na izraz koji sledi nakon petlje.

Provjera uvjeta se izvodi prije nego što se izvrši naredba u petlji. Uvjerite se da uvjet u petlji na kraju postane netačan; inače, petlja se nikada neće završiti. Oznaka pruža izraz sa identifikatorom koji omogućava da se on referencira na drugom mjestu u vašem programu.

Evo još dva primjera petlje sa brojačem:

za (i = 10; i > 0; i--) (
a += 3;
b = i * 2 + 1;
}

Ovdje se vrijednost brojača smanjuje. Njegova početna vrijednost je 10. Petlja će se izvršiti 10 puta i završiti kada brojač i sadrži 0; dok će se vrijednosti potonjeg uzastopno smanjivati ​​sa 10 na 1.

za (i = 2; i< 21; i += 2) b = i * 2 + 1;

I u ovom primjeru, početna vrijednost brojača je 2, a konačna vrijednost je 21, ali će petlja biti izvršena, opet, 10 puta. A sve zato što se vrijednost brojača povećava za 2 i uzastopno poprima vrijednosti 2, 4, 6 ... 20.


Petlja s postuvjetom

Postuslovna petlja je na mnogo načina slična kontra petlji: ona se izvršava sve dok je uslov petlje tačan. Štaviše, uslov se provjerava ne prije, već nakon izvršenja tijela petlje, zbog čega je petlja sa postuslovom dobila ime. Takva petlja će se izvršiti barem jednom, čak i ako je njen uslov od samog početka lažan.

Format postuslovne petlje:

uradi
<тело цикла>
dok (<условие>);

Ključne riječi do i while su date da specificiraju petlju sa postuslovom, zbog čega se takve petlje često nazivaju "do-while petlje".

Evo primjera petlje sa postuslovom:

uraditi (
a = a * i + 2;
++i;
) dok (a< 100);

A evo još jednog primjera:

var a = 0, i = 1;
uraditi (
a = a * i + 2;
++i;
) dok (i< 20);

Iako bi ovdje bilo prikladnije imati petlju s već poznatim brojačem i posebno dizajniranim za takve slučajeve.


Petlja s preduvjetom

Ciklus sa preduslovom se razlikuje od petlje sa postuslovom po tome što se uslov proverava pre izvršavanja tela petlje. Dakle, ako je (uslov) u početku netačan, petlja se nikada neće izvršiti:

dok (<условие>)
<тело цикла>

Ključna riječ while se koristi za kreiranje petlje sa postuslovom. Stoga se takve petlje nazivaju i "while petlje" (ne treba ih brkati sa "do-while petljama"!).

Primjer petlje sa preduvjetom:

dok (a< 100) {
a = a * i + 2;
++i;
}


Prekidanje i ponovno pokretanje ciklusa

Ponekad je potrebno prekinuti izvođenje petlje. Da bi to uradili, JavaScript obezbeđuje Web programere break izjave i nastavi.

Naredba break vam omogućava da prekinete izvođenje petlje i skočite na sljedeću naredbu nakon nje:

dok (a< 100) {
a = a * i + 2;
if (a > 50) break;
++i;
}

U ovom primjeru prekidamo petlju ako je vrijednost varijable aće premašiti 50.

Naredba restart continue vam omogućava ponovno pokretanje ciklus, tj. ostaviti neizvršene sve naredne izraze uključene u tijelo petlje i započeti izvršavanje petlje od samog njenog početka: provjera stanja, izvršavanje inkrementa i tijela, itd.

primjer:

dok (a< 100) {
i = ++i;
ako (i > 9 && i< 11) continue;
a = a * i + 2;
}

Ovdje preskačemo izraz koji izračunava a, za sve vrijednosti i od 10 do 20.