JavaScript'te Kapanışlar ve Anında Fonksiyon Çağrısı

Zaten bildiğiniz gibi, anonim bir fonksiyonu anında çağırabilir ve çalışma sonucunu herhangi bir değişkene atayabilirsiniz:

javascriptlet result = function() {
  return '!';
}();

console.log(result); // '!' yazdırır

Bu durumda, anında çağrılan fonksiyon genellikle (yine de gerekli olmasa da) parantez içine alınır. Bu, fonksiyonun anında çağrıldığının hemen anlaşılması için yapılır:

javascriptlet result = (function() {
  return '!';
})();

console.log(result); // '!' yazdırır

Şimdi, anında çağrılan fonksiyonun sonucunun anonim bir fonksiyon olmasını sağlayalım:

javascriptlet func = (function() {
  return function() {
    console.log('!');
  }
})();

func(); // '!' yazdırır

Döndürülen fonksiyonun, num değişkenini kapanışta saklamasını sağlayalım:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
})();

Eğer num++ eklersek, func fonksiyonu hazır bir sayaç haline gelir:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
})();

func(); // 1 yazdırır
func(); // 2 yazdırır
func(); // 3 yazdırır
func(); // 4 yazdırır
func(); // 5 yazdırır
Задание 1

Koduma bakmadan, kendi başınıza aynı sayacı uygulayın.

Задание 2

Sayaçın, 5'e kadar saymasını ve sonra yeniden başlamasını sağlayacak şekilde değiştirin.