Menyajikan perhatian Anda adalah terjemahan dari artikel oleh Parathan Thiyagalingam yang diterbitkan di medium.freecodecamp.org. Ingin tahu cara kerja penutupan JavaScript? Lihat di bawah kucing!
Foto Austin Distel dengan UnsplashPenutupan adalah kombinasi dari semua variabel dalam lingkup pada saat fungsi dibuat. Untuk menggunakan penutupan, Anda harus membuat fungsi bersarang, yaitu fungsi di dalam fungsi. Fungsi dalam akan memiliki akses ke variabel dalam lingkup fungsi luar bahkan setelah fungsi luar selesai. (Ini adalah
penutupan yang menyediakan akses ini.) Setiap kali fungsi dibuat, penutupan dibuat.
Sebelum Anda mulai memahami konsep penutupan, pertimbangkan rantai lingkup apa dalam JavaScript.
Sebagai aturan, ada dua jenis area visibilitas: global dan lokal.
Dalam JavaScript, variabel di dalam suatu fungsi tidak dapat diakses secara eksternal - tidak seperti, misalnya, variabel di dalam blok (dalam kondisi seperti
if
dan
while
).
Berdasarkan ini, fungsi dalam JavaScript memiliki ruang lingkup, tetapi blok tidak.
var a = 10; function app(){ var b = 2; console.log(a);
Seperti yang sudah kita ketahui,
a adalah variabel global, dan
b adalah lokal, yaitu, hanya digunakan oleh fungsi
app
. Di luar lingkup lokal, kami tidak memiliki akses ke variabel lokal.
Cara menggunakan fungsi bersarang (fungsi di dalam suatu fungsi)
var a = 10; function app(){ var b = 2; var d = 3; function add(){ var c = a + b; } return add; } var x = app(); console.dir(x);
Pada contoh di atas,
app
adalah fungsi induk,
add
adalah fungsi anak.
- Alih-alih console.log, console.dir digunakan untuk menampilkan semua properti dari objek yang dipilih.
- Variabel x ditugaskan ke fungsi
app
, yang kemudian mengembalikan fungsi add
. Ini memungkinkan Anda untuk melihat semua properti dari objek fungsi add
.
Jika Anda membuka konsol di browser, Anda akan menemukan objek
Closure
di dalam array data
Scopes
.

Karena fungsi
add
internal memiliki akses ke variabel
b dan
d yang termasuk dalam fungsi eksternal, kedua variabel ini akan ditambahkan ke objek
Closure
sebagai referensi.
Pertimbangkan contoh penutupan lain.
var a = 10; var startFunc; function app(){ var b = 2; function add(){ var c = a + b; console.log(c); } startFunc = add(); } app();
startFunc
global startFunc
ditugaskan fungsi add
, yang merupakan anak dari app
fungsi induk.- Ini menjadi mungkin hanya setelah memanggil fungsi aplikasi. Jika tidak, fungsi
startFunc
akan berperilaku seperti variabel global tanpa nilai yang ditetapkan.
Cara menggunakan penutupan dalam JavaScript
Banyak dari kita, menggunakan penutupan ketika menulis kode, tidak sepenuhnya mengerti mengapa mereka melakukan ini. JavaScript tidak memiliki pengubah
publik ,
terlindungi, dan
pribadi yang ditemukan dalam bahasa pemrograman berorientasi objek. Oleh karena itu, untuk memblokir akses ke namespace untuk kode eksternal, kami terpaksa menggunakan bantuan fungsi.
Dan karena kita berbicara tentang fungsi - fungsi
segera dipanggil (IIFE) dimulai segera setelah pengumuman. Dia bahkan tidak perlu dipanggil.
Sintaks IIFE terlihat seperti ini:
(function(){
Pertimbangkan contoh ini:
var studnetEnrollment = (function () {
count
dan
prefix
adalah dua variabel pribadi yang tidak dapat diubah. Akses ke mereka terbuka hanya untuk fungsi internal (dalam kasus kami, ini adalah fungsi
innerFunc
).
- Pertama kali fungsi
studentEnrollment
dipanggil, fungsi studentEnrollment
meningkatkan nilai variabel count
menjadi 1. - Kedua kalinya,
count
bertambah dari 1 menjadi 2. - Semua ini hanya dimungkinkan melalui penutupan.
Kesimpulan
Penutupan adalah seperangkat variabel dari fungsi eksternal, karena ruang lingkup fungsi internal mendapatkan akses ke variabel-variabel ini. Ini melindungi namespace global.
Fungsi penutupan memungkinkan pengembang untuk menulis kode bersih - seperti dalam bahasa pemrograman berorientasi objek, kode di mana variabel global dan lokal tidak bingung.
Selamat coding!