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
Tanpa melihat kode saya, coba implementasikan pencatat serupa sendiri.
Modifikasi kerja pencatat sehingga
ia menghitung hingga 5, lalu hitungan dimulai
ulang dari awal.