Penutupan dalam JavaScript

Mar 07 2023
Dalam fungsi JavaScript adalah blok kode yang dirancang untuk melakukan tugas tertentu. Itu berjalan ketika Anda memanggilnya.
Penutupan dalam JavaScript

Dalam fungsi JavaScript adalah blok kode yang dirancang untuk melakukan tugas tertentu. Itu berjalan ketika Anda memanggilnya.

Misalnya:

function myFunction(message){
  console.log(message)
}

myFunction("Hello there!!")

myFunction("Welcome, boss")

Namun bagaimana jika kita ingin mengetahui apa yang terjadi pada eksekusi pertama atau sebelumnya. Di situlah penutupan datang.

Apa itu Penutupan?

Dengan kata sederhana ketika suatu fungsi mengembalikan fungsi lain, yang memiliki akses ke ruang lingkup fungsi luarnya disebut sebagai penutupan dalam JavaScript.

Misalnya:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}


const result = outer()

function inner (){
  counter++;
  return counter;
}

Jadi entah bagaimana JavaScript mengingat counternilai sebelumnya dan melakukan operasi matematika.
Anda mungkin bertanya bagaimana Js melakukannya?

Ketika suatu fungsi mengembalikan suatu fungsi, itu tidak hanya mengembalikan fungsi, itu juga mengembalikan cakupan leksikal dari fungsi itu. Semua variabel itu, data yang terkait dengan fungsi yang dikembalikan itu sebagai properti tersembunyi bersama dengan fungsi yang dikembalikan itu. Properti tersembunyi itu juga disebutBackpack

Ransel ini memiliki banyak nama:

  • Ditutup karena 'Lingkungan Variabel' (COVE)
  • Data Referensi Cakupan Leksikal Persisten (PLSRD)
  • Ransel
  • Penutup

Mari kita lihat contoh lain:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}

const result = outer()

result() // 1
result() // 2

const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2


Mengapa Penutupan:

  • Ini membantu kami membuat fungsi pembantu yang memungkinkan fungsi yang kuat seperti sekali dan memo.
  • Membantu kami dalam membuat Iterator dan Generator menggunakan cakupan dan penutupan leksikal.
  • Banyak pola desain JavaScript termasuk pola modul yang menggunakan penutupan, dengan mempertahankan status aplikasi tanpa mencemari namespace global.
  • Callback dan Janji bergantung pada penutupan untuk mempertahankan status di dunia JavaScript asinkron.