Materi
Di JavaScript, fungsi adalah nilai. Fungsi bisa disimpan di variabel, dikirim sebagai argumen, dan dikembalikan dari fungsi lain. Fungsi yang menerima atau mengembalikan fungsi disebut fungsi tingkat tinggi. map, filter, dan sort sudah termasuk: ketiganya menerima fungsi yang menentukan apa yang dikerjakan untuk setiap isi.
Ketika sebuah fungsi dibuat di dalam fungsi lain, ia tetap bisa membaca variabel fungsi luarnya walaupun fungsi luar itu sudah selesai berjalan. Gabungan fungsi dengan lingkungan tempat ia dibuat ini disebut closure. Setiap pemanggilan fungsi luar membuat lingkungan baru, sehingga dua fungsi hasil pemanggilan yang berbeda menyimpan variabelnya masing-masing.
function buatPajak(persen) {
return (harga) => harga + (harga * persen) / 100;
}
const ppn = buatPajak(11);
ppn(200000); // 222000
function buatTabungan() {
let saldo = 0;
return (setor) => (saldo += setor);
}
const tabunganA = buatTabungan();
const tabunganB = buatTabungan();
tabunganA(5000); tabunganA(2000); // 7000
tabunganB(1000); // 1000, saldo terpisahClosure dipakai untuk dua hal. Pertama, membuat fungsi yang sudah dikonfigurasi, seperti ppn di atas: tarifnya ditentukan sekali, lalu fungsinya dipakai di banyak tempat. Kedua, menyimpan keadaan yang tidak bisa diubah dari luar: variabel saldo hanya bisa disentuh lewat fungsi yang dikembalikan, bukan ditulis ulang oleh bagian lain program.