⊗jsPmClCr 263 of 505 menu

Laskuri sulkeumilla JavaScriptissä

Kirjoitetaan käsitelty koodi uudelleen siten, että palautettu funktio kasvattaa muuttujan num arvoa yhdellä jokaisella kerralla:

function test() { let num = 1; return function() { console.log(num); num++; // lisää yksi } } let func = test();

Käy niin, että jokainen funktion func kutsu tulostaa konsoliin uuden arvon:

function test() { let num = 1; return function() { console.log(num); num++; } } let func = test(); func(); //tulostaa 1 func(); //tulostaa 2 func(); //tulostaa 3 func(); //tulostaa 4 func(); //tulostaa 5

Olemme siis toteuttaneet funktiokutsujen laskurin, hyödyntäen sulkeumaa (tarkemmin sanottuna käyttäen muuttujaa num funktiomme sulkeumasta).

Huomioi, että jokainen funktion test kutsu palauttaa uuden funktion, jolla on oma sulkeumansa. Eli eri laskurit toimivat itsenäisesti:

function test() { let num = 1; return function() { console.log(num); num++; }; } let func1 = test(); // ensimmäinen laskuri func1(); //tulostaa 1 func1(); //tulostaa 2 let func2 = test(); // toinen laskuri func2(); //tulostaa 1 func2(); //tulostaa 2

Eli sama muuttuja num eri funktioilla on eri arvo!

Eli jos kutsumme funktiota test kaksi kertaa, niin siitä saatavat funktiot toimivat itsenäisesti ja kukin niistä on oma itsenäinen muuttuja num.

Toteuta itsenäisesti, katsomatta koodiini, funktiokutsujen laskuri, joka toimii sulkeumilla.

Olkoon funktiolla sulkeumassa luku 10. Tee niin, että jokainen funktion kutsu vähentää tätä lukua 1:llä ja tulostaa konsoliin vähennetyn luvun.

Muokkaa edellistä tehtävää niin, että laskenta etenee 0:aan saakka, minkä jälkeen jokainen seuraava funktiokutsu tulostaa konsoliin viestin siitä, että laskenta on päättynyt.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää