Sulkeumat ja välitön funktion kutsu JavaScriptissä
Kuten jo tiedät, nimetöntä funktiota voidaan kutsua välittömästi ja antaa sen toiminnan tulos jollekin muuttujalle:
let result = function() {
return '!';
}();
console.log(result); // tulostaa '!'
Usein välittömästi kutsuttava funktio suljetaan tällöin pyöreisiin sulkeisiin, vaikka siihen ei ole varsinaista tarvetta. Tämä tehdään sen vuoksi, että on heti nähtävissä, että funktiota kutsutaan välittömästi:
let result = (function() {
return '!';
})();
console.log(result); // tulostaa '!'
Tehdään nyt niin, että välittömästi kutsutun funktion tuloksena on nimetön funktio:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // tulostaa '!'
Tehdään nyt niin, että palautettu funktio
säilyttää sulkeumassaan muuttujan num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Jos lisätään vielä num++, niin funktio
func muuttuu valmiiksi laskuriksi:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // tulostaa 1
func(); // tulostaa 2
func(); // tulostaa 3
func(); // tulostaa 4
func(); // tulostaa 5
Älä katsomatta koodiini, toteuta vastaava laskuri itse.
Muokkaa laskurin toimintaa siten, että
se laskee 5:een asti, minkä jälkeen laskeminen alkaa
alusta.