Penghitung dengan Closure di JavaScript
Mari kita tulis ulang kode yang telah kita bahas
sehingga fungsi yang dikembalikan setiap kali
menambah nilai variabel num
sebesar satu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // menambahkan satu
}
}
let func = test();
Hasilnya, setiap pemanggilan fungsi func
akan menampilkan nilai baru di konsol:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //akan menampilkan 1
func(); //akan menampilkan 2
func(); //akan menampilkan 3
func(); //akan menampilkan 4
func(); //akan menampilkan 5
Jadi, kita telah mengimplementasikan penghitung pemanggilan
fungsi, menggunakan closure (lebih tepatnya menggunakan
variabel num dari closure fungsi kita).
Perlu diingat bahwa setiap pemanggilan fungsi test
akan mengembalikan fungsi baru, yang
akan memiliki closure-nya sendiri. Artinya, penghitung yang berbeda
akan bekerja secara independen:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // penghitung pertama
func1(); //akan menampilkan 1
func1(); //akan menampilkan 2
let func2 = test(); // penghitung kedua
func2(); //akan menampilkan 1
func2(); //akan menampilkan 2
Artinya, variabel num yang sama
untuk fungsi yang berbeda akan memiliki nilai yang berbeda!
Jadi, jika kita memanggil fungsi test
dua kali, maka fungsi yang diperoleh darinya akan
bekerja secara independen dan masing-masing
fungsi tersebut akan memiliki
variabel num independennya sendiri.
Secara mandiri, tanpa melihat kode saya, implementasikan penghitung pemanggilan fungsi, yang bekerja menggunakan closure.
Misalkan fungsi dalam closure menyimpan angka 10.
Atur sedemikian rupa sehingga setiap pemanggilan fungsi
mengurangi angka ini sebesar 1 dan menampilkan
angka yang berkurang ke konsol.
Modifikasi tugas sebelumnya sehingga
penghitungan mundur mencapai 0, kemudian setiap
pemanggilan fungsi berikutnya menampilkan pesan
di konsol bahwa penghitungan mundur telah selesai.