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
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.
Atas ialah kandungan terperinci Penutupan - Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!