Closure i izvlačenje funkcije na licu mesta u JavaScript-u
Kao što već znate, možete pozvati anonimnu funkciju na licu mesta i dodeliti rezultat njenog rada nekoj promenljivoj:
let result = function() {
return '!';
}();
console.log(result); // ispisaće '!'
Funkciju koja se poziva na licu mesta, u takvim slučajevima, često stavljaju u obične zagrade, iako za to nema potrebe. To se radi da bi se odmah videlo da se funkcija poziva na licu mesta:
let result = (function() {
return '!';
})();
console.log(result); // ispisaće '!'
Neka sada rezultat funkcije pozvane na licu mesta bude anonimna funkcija:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // ispisaće '!'
Učinimo da vraćena funkcija
čuva u closure-u promenljivu num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Ako dodamo još num++, onda će funkcija
func postati gotov brojač:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // ispisaće 1
func(); // ispisaće 2
func(); // ispisaće 3
func(); // ispisaće 4
func(); // ispisaće 5
Ne zagledavajući se u moj kod, samostalno realizujte isti takav brojač.
Modifikujte rad brojača tako da
on broji do 5, a onda da se odbrojavanje ponovo
započinje.