Penutup dalam JavaScript
Mari kita tulis semula kod yang kita pertimbangkan
supaya fungsi yang dipulangkan setiap kali
meningkatkan nilai pembolehubah num
secara satu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // tambah satu
}
}
let func = test();
Ternyata bahawa setiap panggilan fungsi func
akan memaparkan nilai baru dalam konsol:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //akan memaparkan 1
func(); //akan memaparkan 2
func(); //akan memaparkan 3
func(); //akan memaparkan 4
func(); //akan memaparkan 5
Ternyata, kami telah melaksanakan pembilang panggilan
fungsi, menggunakan penutupan (lebih tepat menggunakan
pembolehubah num daripada penutupan fungsi kami).
Perlu diingat bahawa setiap panggilan fungsi test
akan memulangkan fungsi baru, yang
akan mempunyai penutupannya sendiri. Iaitu, pembilang yang berbeza
akan berfungsi secara bebas:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // pembilang pertama
func1(); //akan memaparkan 1
func1(); //akan memaparkan 2
let func2 = test(); // pembilang kedua
func2(); //akan memaparkan 1
func2(); //akan memaparkan 2
Ternyata bahawa pembolehubah yang sama num
untuk fungsi yang berbeza akan mempunyai nilai yang berbeza!
Iaitu, jika kita memanggil fungsi test
dua kali, maka fungsi yang diperoleh daripadanya akan
berfungsi secara bebas dan setiap
fungsi ini akan mempunyai bebasnya sendiri
pembolehubah num.
Secara bebas, tanpa melihat kod saya, laksanakan pembilang panggilan fungsi, berfungsi pada penutupan.
Biarkan fungsi dalam penutupan menyimpan nombor 10.
Lakukan supaya setiap panggilan fungsi
mengurangkan nombor ini sebanyak 1 dan memaparkan
nombor yang dikurangkan dalam konsol.
Ubah suai tugas sebelumnya supaya
kiraan turun hingga 0, dan kemudian setiap
panggilan fungsi seterusnya memaparkan dalam konsol
mesej bahawa kiraan telah tamat.