Rumah  >  Artikel  >  hujung hadapan web  >  Penutupan - Javascript

Penutupan - Javascript

Susan Sarandon
Susan Sarandonasal
2024-11-11 04:57:02732semak imbas

Closures - Javascript

Anda tahu apa? Dalam JavaScript, semua fungsi secara semula jadi adalah penutupan (dengan hanya satu pengecualian). Benar, mari kita fahami cara ini berfungsi.

Penutupan ialah fungsi yang digabungkan bersama dengan rujukan leksikalnya. Walaupun itu definisi rasmi, apakah maksud penutupan sebenarnya? Sebelum menyelami penutupan, memahami fungsi kelas pertama adalah bermanfaat, kerana ia memberikan pengetahuan asas yang membantu anda memahami cara penutupan berfungsi.

Konsep Utama yang Perlu Diketahui Dahulu:

1. Fungsi kelas pertama: Fungsi yang boleh diberikan kepada pembolehubah, diluluskan sebagai hujah dan dikembalikan daripada fungsi.
2. Skop fungsi: Fungsi boleh mengakses pembolehubah dari skopnya sendiri dan dari skop sekeliling (luar).
3. Konteks pelaksanaan: Setiap kali fungsi dipanggil, konteks pelaksanaan baharu dicipta. Ini termasuk persekitaran berubah dan rantai skop.

Secara amnya, pembolehubah yang dibuat dalam fungsi diskop kepada fungsi itu dan dimusnahkan serta-merta selepas fungsi selesai melaksanakan. Sebagai contoh, pertimbangkan fungsi bernama premiumContentAccess yang mengandungi dua pembolehubah: articlesAllowedToAccess dan currentlyAccessed.

function premiumContentAccess() {
  let articlesAllowedToAccess = 3;
  let currentlyAccessed = 0;
}

premiumContentAccess();

Apabila premiumContentAccess dilaksanakan, pembolehubah setempat articlesAllowedToAccess dan currentlyAccessed dicipta. Setelah pelaksanaan fungsi selesai, pembolehubah ini keluar dari skop dan layak untuk kutipan sampah, bermakna ia dimusnahkan dengan berkesan dan tidak boleh diakses selepas itu.

Adakah mungkin untuk mengekalkan akses kepada pembolehubah ini walaupun selepas pelaksanaan premiumContentAccess? Inilah penutupan.

Apakah Penutupan?

Penutupan terbentuk apabila fungsi dikembalikan yang mempunyai akses kepada pembolehubah sekelilingnya (luar). Rujukan pembolehubah ini digabungkan bersama-sama dengan fungsi, membolehkan rujukan tersebut berterusan.

function premiumContentAccess() {
  let articlesAllowedToAccess = 3;
  let currentlyAccessed = 0;  

  function accessArticle() {
    if (currentlyAccessed >= articlesAllowedToAccess) {
      return 'Premium Article Access Reached';
    }
    currentlyAccessed++;
    return 'Article accessed';
  }
  return accessArticle;
}

let accessArticle = premiumContentAccess();

console.log(accessArticle()); // Outputs: Article accessed
console.log(accessArticle()); // Outputs: Article accessed
console.log(accessArticle()); // Outputs: Article accessed
console.log(accessArticle()); // Outputs: Premium Article Access Reached

Pecahan Contoh

1. Fungsi Luar: premiumContentAccess() ialah fungsi luar yang mentakrifkan pembolehubah articlesAllowedToAccess dan currentlyAccessed.
2. Fungsi Dalaman: accessArticle ialah fungsi dalaman yang mengakses pembolehubah daripada skop leksikalnya, yang ditakrifkan dalam fungsi luar.
3. Penutupan: Apabila premiumContentAccess() dipanggil, ia mengembalikan fungsi accessArticle mengekalkan akses kepada pembolehubah articlesAllowedToAccess dan walaupun selepas fungsi luar selesai dilaksanakan.
4. Pengekalan Negeri: Penutupan membenarkan accessArticle mengekalkan keadaannya sendiri mengenai berapa banyak artikel telah diakses. Setiap panggilan untuk accessArticle mengubah suai currentlyAccessed, yang dikekalkan kerana penutupan.

Semua Fungsi Adalah Penutupan:

Seperti yang kami nyatakan pada permulaan, semua fungsi adalah penutupan semula jadi.

Iaitu: mereka secara automatik mengekalkan rujukan kepada konteks penciptaan mereka melalui harta

[[Persekitaran]] tersembunyi, membenarkan kod mereka mengakses pembolehubah luar.

Pengecualian: Fungsi yang dibuat menggunakan pembina Fungsi baharu menetapkan [[Persekitaran]] kepada konteks global dan bukannya konteks penciptaan.


Terima kasih kerana membaca! Saya harap anda mendapati blog ini bermaklumat dan menarik. Jika anda mendapati sebarang ketidaktepatan atau mempunyai sebarang maklum balas, sila jangan teragak-agak untuk memberitahu saya.

Atas ialah kandungan terperinci Penutupan - Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn