ECMAScript closure

Yang paling mengkhiaati di ECMAScript adalah dukungan closure (tutup)

Penutup, merujuk kepada ekspresi leksikal yang mencakup variabel yang tidak dihitung, yaitu, fungsi dapat menggunakan variabel yang didedefinisi di luar fungsi.

Contoh penutup yang sederhana

Penggunaan variabel global di ECMAScript adalah contoh penutup yang sederhana. Berpikir tentang kode di bawah ini:

var sMessage = "hello world";
function sayHelloWorld() {
  alert(sMessage);
}
sayHelloWorld();

Dalam kode ini, skrip diunggah ke memori setelah itu, tidak menghitung nilai variabel sMessage untuk fungsi sayHelloWorld(). Fungsi ini hanya menangkap nilai sMessage untuk penggunaan nantinya, yaitu, interpreter mengetahui bahwa nilai sMessage harus dicek saat memanggil fungsi. sMessage akan diisi saat memanggil fungsi sayHelloWorld() (baris terakhir) untuk menampilkan pesan "hello world".

Contoh penutup yang kompleks

Mendefinisikan yang lain di dalam fungsi akan membuat penutup menjadi lebih kompleks. Contohnya:

var iBaseNum = 10;
function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}

Di sini, fungsi addNum() termasuk fungsi doAdd() (penutup). Fungsi internal adalah penutup, karena ia akan mengambil nilai parameter iNum1 dan iNum2 serta nilai variabel global iBaseNum. Tahap terakhir fungsi addNum() memanggil doAdd(), menambahkan dua parameter dan variabel global, dan mengembalikan nilai yang dijumlahkan.

Konsep penting yang harus dipahami di sini adalah, fungsi doAdd() tidak menerima parameter, nilai yang digunakan adalah yang diambil dari lingkungan eksekusi.

Dapat dilihat, penutup adalah bagian yang sangat kuat dan umum dalam ECMAScript, yang dapat digunakan untuk melaksanakan perhitungan yang kompleks.

Petunjuk:Sama seperti menggunakan fungsi tingkat tinggi apapun, gunakan penutup dengan hati-hati, karena mereka dapat menjadi sangat kompleks.