Penutupan dan Pemanggilan Fungsi di Tempat dalam JavaScript

Seperti yang sudah Anda ketahui, Anda dapat memanggil fungsi anonim di tempat dan menetapkan hasil kerjanya ke suatu variabel:

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

console.log(result); // akan menampilkan '!'

Seringkali fungsi yang dipanggil di tempat, dalam kasus seperti ini, ditempatkan dalam tanda kurung, meskipun sebenarnya tidak perlu. Ini dilakukan agar langsung terlihat bahwa fungsi dipanggil di tempat:

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

console.log(result); // akan menampilkan '!'

Sekarang, misalkan hasil dari fungsi yang dipanggil di tempat adalah fungsi anonim:

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

func(); // akan menampilkan '!'

Mari kita buat agar fungsi yang dikembalikan menyimpan variabel num dalam penutupan:

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

Jika ditambahkan num++, maka fungsi func akan menjadi pencatat yang siap pakai:

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

func(); // akan menampilkan 1
func(); // akan menampilkan 2
func(); // akan menampilkan 3
func(); // akan menampilkan 4
func(); // akan menampilkan 5
Задание 1

Tanpa melihat kode saya, coba implementasikan pencatat serupa sendiri.

Задание 2

Modifikasi kerja pencatat sehingga ia menghitung hingga 5, lalu hitungan dimulai ulang dari awal.