Փակումներ և անմիջական ֆունկցիայի կանչ JavaScript-ում
Ինչպես արդեն գիտեք, կարելի է անմիջապես կանչել անանուն ֆունկցիա և դրա աշխատանքի արդյունքը վերագրել ինչ-որ փոփոխականի.
let result = function() {
return '!';
}();
console.log(result); // կցուցադրի '!'
Հաճախ այս դեպքում անմիջապես կանչվող ֆունկցիան տեղադրում են կլոր փակագծերում, չնայած դրա կարիքը չկա։ Դա արվում է այնպես, որ անմիջապես տեսանելի լինի, որ ֆունկցիան կանչվում է անմիջապես.
let result = (function() {
return '!';
})();
console.log(result); // կցուցադրի '!'
Թող հիմա անմիջապես կանչված ֆունկցիայի արդյունքը լինի անանուն ֆունկցիա.
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // կցուցադրի '!'
Եկեք անենք, որ վերադարձվող ֆունկցիան
փակման մեջ պահի num փոփոխականը.
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Եթե ավելացնենք num++, ապա ֆունկցիան
func կդառնա պատրաստի հաշվիչ.
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // կցուցադրի 1
func(); // կցուցադրի 2
func(); // կցուցադրի 3
func(); // կցուցադրի 4
func(); // կցուցադրի 5
Առանց իմ կոդին նայելու, ինքնուրույն իրականացրեք նմանատիպ հաշվիչ։
Փոփոխեք հաշվիչի աշխատանքն այնպես, որ
այն հաշվի մինչև 5, ապա հաշվարկը սկսվի
սկզբից։