ჩამკეტები და ფუნქციის მყისიერი გამოძახება 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-მდე, და შემდეგ თვლა თავიდან
დაიწყოს.