Penutupan dan Pelaksanaan Fungsi serta-merta dalam JavaScript

Seperti yang anda sudah tahu, anda boleh memanggil fungsi tanpa nama serta-merta dan menetapkan hasilnya kepada beberapa pembolehubah:

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

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

Seringkali fungsi yang dipanggil serta-merta, dalam kes sedemikian, diletakkan dalam kurungan, walaupun ini tidak diperlukan. Ini dilakukan supaya langsung kelihatan bahawa fungsi dipanggil serta-merta:

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

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

Sekarang, biarkan hasil fungsi yang dipanggil serta-merta menjadi fungsi tanpa nama:

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

func(); // akan memaparkan '!'

Mari kita buat supaya fungsi yang dipulangkan menyimpan pembolehubah num dalam penutupan:

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

Jika menambah num++ lagi, maka fungsi func akan menjadi pembilang siap:

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

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

Tanpa mengintip kod saya, laksanakan pembilang yang sama secara bebas.

Задание 2

Ubah suai kerja pembilang supaya ia mengira hingga 5, dan kemudian kiraan bermula semula.