cari

Apakah penutupan dalam javascript

Oct 18, 2021 am 11:59 AM
javascriptpenutupan

Dalam JavaScript, apabila dua fungsi bersarang antara satu sama lain, fungsi dalaman ialah penutupan. Penutupan ialah fungsi yang mempunyai akses kepada pembolehubah dalam skop fungsi lain Cara yang paling biasa untuk membuat penutupan ialah mencipta fungsi lain dalam fungsi dan mengakses pembolehubah tempatan fungsi ini melalui fungsi lain.

Apakah penutupan dalam javascript

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.

1. Apakah itu penutupan

Penutupan ialah fungsi yang boleh membaca pembolehubah dalaman fungsi lain. Dalam JavaScript, hanya subfungsi dalam fungsi boleh membaca pembolehubah setempat, jadi penutupan boleh difahami sebagai "fungsi yang ditakrifkan dalam fungsi." Pada dasarnya, penutupan ialah jambatan antara bahagian dalam fungsi dan bahagian luar fungsi. (Aplikasi penutupan yang paling tipikal adalah untuk melaksanakan fungsi panggil balik).

2. Kelebihan, keburukan dan ciri penutupan dalam JS

Kelebihan:

1 , Lindungi keselamatan pembolehubah dalam fungsi

2. Kekalkan pembolehubah dalam ingatan (menggunakan terlalu banyak akan menjadi kelemahan dan menduduki memori

3. Kesinambungan logik, apabila ditutup Apabila digunakan sebagai parameter dalam panggilan fungsi lain, ia menghalang anda daripada menulis logik tambahan secara berasingan daripada logik semasa.

4. Pembolehubah setempat yang memudahkan konteks panggilan.

5. Mengukuhkan enkapsulasi boleh mencapai perlindungan pembolehubah.

Kelemahan:

1. Memori residen akan meningkatkan penggunaan memori dengan mudah menyebabkan kebocoran memori.
2. Terdapat juga masalah yang sangat serius, iaitu masalah sisa ingatan ini bukan sahaja kerana ia berada dalam ingatan, tetapi yang lebih penting, penggunaan penutupan yang tidak betul akan menyebabkan penjanaan ingatan tidak sah.

Ciri:

1. Fungsi bersarang fungsi

2. Fungsi dalaman boleh mengakses pembolehubah fungsi luaran

3. Parameter dan pembolehubah tidak akan dikitar semula.

3. Skop pembolehubah

Untuk memahami penutupan, tidak cukup dengan memahami konsep penutupan di atas sahaja. Pertama, anda mesti memahami skop pembolehubah khas JavaScript.

1. Hanya terdapat dua skop pembolehubah: pembolehubah global dan pembolehubah tempatan.

2. Keistimewaan bahasa JavaScript ialah pembolehubah global boleh dibaca terus di dalam fungsi, tetapi pembolehubah tempatan di dalam fungsi tidak boleh dibaca di luar fungsi.

3. Nota: Apabila mengisytiharkan pembolehubah di dalam fungsi, pastikan anda menggunakan arahan var. Jika anda tidak menggunakannya, anda sebenarnya mengisytiharkan pembolehubah global!

4. Tafsirkan penutupan dengan kod

Proses penciptaan penutupan dalam Javascript adalah seperti yang ditunjukkan dalam program berikut.

function a () {
   var i = 0;
   function b () {
      alert (i++);
   }
  return b;
}
var c = a();
c();  //函数调用

Ciri Kod

Kod ini mempunyai dua ciri:

1. Fungsi b bersarang dalam fungsi Dalam a;

2. Fungsi a mengembalikan fungsi b.

Dengan cara ini, selepas melaksanakan var c = a(), pembolehubah c sebenarnya menunjuk ke fungsi b Selepas melaksanakan c() sekali lagi, tetingkap akan muncul untuk memaparkan nilai i (kali pertama ialah 1) . Kod ini sebenarnya mencipta penutupan kerana pembolehubah c fungsi luar a merujuk kepada fungsi b dalam fungsi a. Dalam erti kata lain, apabila fungsi b dalam fungsi a dirujuk oleh pembolehubah di luar fungsi a, penutupan dibuat.

Fungsi

Ringkasnya, fungsi penutupan adalah untuk membolehkan kutipan sampah Javascript selepas a dilaksanakan dan dipulangkan sumber yang diduduki oleh a, kerana pelaksanaan fungsi dalaman a b perlu bergantung pada pembolehubah dalam a.

Dalam contoh di atas, disebabkan kewujudan penutupan, i dalam a akan sentiasa wujud selepas fungsi a kembali Dengan cara ini, setiap kali c() dilaksanakan, i akan menjadi nilai i iaitu dimaklumkan selepas menambah 1. .

Kemudian mari bayangkan situasi lain Jika a mengembalikan sesuatu selain daripada fungsi b, keadaannya berbeza sama sekali. Kerana selepas a dilaksanakan, b tidak dikembalikan ke dunia luar a, tetapi hanya dirujuk oleh a Pada masa ini, a hanya akan dirujuk oleh b. Oleh itu, fungsi a dan b merujuk antara satu sama lain tetapi tidak terganggu oleh dunia luar (dirujuk oleh dunia luar , fungsi a dan b akan dikitar semula).

Senario Aplikasi

1 Lindungi pembolehubah dalam fungsi. Dalam fungsi a, i hanya boleh diakses oleh fungsi b dan tidak boleh diakses melalui cara lain, sekali gus melindungi keselamatan i.

2. Kekalkan pembolehubah dalam ingatan. Oleh kerana penutupan, i dalam fungsi a sentiasa wujud dalam ingatan, jadi setiap kali c() dilaksanakan, i akan dinaikkan sebanyak 1.

五、如何从外部读取函数内部的局部变量?

  出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面(三、变量作用域)已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。那就是在函数内部,再定义一个函数。

function demo1 () {
    var n = 6699;
    function demo2 () {
      alert(n); // 6699
    }
  }

在上面的代码中,函数 demo2 就被包括在函数demo1内部,这时demo1内部的所有局部变量,对demo2都是可见的。但是反过来就不行,demo2内部的局部变量,对demo1就是不可见的。 

这就是Javascript语言特有的”链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 

既然demo2可以读取demo1中的局部变量,那么只要把demo2作为返回值,我们不就可以在demo1外部读取它的内部变量了吗!

六、闭包的用途

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在demo1调用后被自动清除。 

那为什么会这样呢?原因就在于demo1是demo2的父函数,而demo2被赋给了一个全局变量,这导致demo2始终在内存中,而demo2的存在依赖于demo1,因此demo1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

七、使用闭包的注意点

1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 

2、闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

八、总结:

1、闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。 

2、不适合场景:返回闭包的函数是个非常大的函数。 

    闭包的典型框架应该就是jquery了。 

    闭包是javascript语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。 

    这在做框架的时候体现更明显,有些方法和属性只是运算逻辑过程中的使用的,不想让外部修改这些属性,因此就可以设计一个闭包来只提供方法获取。 

3、 不必纠结到底怎样才算闭包,其实你写的每一个函数都算作闭包,即使是全局函数,你访问函数外部的全局变量时,就是闭包
的体现。

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Apakah penutupan dalam 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
React: Membuat antara muka pengguna yang dinamik dan interaktifReact: Membuat antara muka pengguna yang dinamik dan interaktifApr 14, 2025 am 12:08 AM

React adalah alat pilihan untuk membina antara muka pengguna yang dinamik dan interaktif. 1) Komponen dan JSX membuat UI berpecah dan menggunakan semula mudah. 2) Pengurusan negeri dilaksanakan melalui cangkuk UseState untuk mencetuskan kemas kini UI. 3) Mekanisme pemprosesan acara bertindak balas terhadap interaksi pengguna dan meningkatkan pengalaman pengguna.

Rangka Kerja Backend: PerbandinganRangka Kerja Backend: PerbandinganApr 13, 2025 am 12:06 AM

React adalah rangka kerja front-end untuk membina antara muka pengguna; Rangka kerja back-end digunakan untuk membina aplikasi sisi pelayan. React menyediakan kemas kini UI yang komponen dan cekap, dan Rangka Kerja Backend menyediakan penyelesaian perkhidmatan backend lengkap. Apabila memilih timbunan teknologi, keperluan projek, kemahiran pasukan, dan skalabiliti harus dipertimbangkan.

HTML dan React: Hubungan antara markup dan komponenHTML dan React: Hubungan antara markup dan komponenApr 12, 2025 am 12:03 AM

Hubungan antara HTML dan React adalah teras pembangunan front-end, dan mereka bersama-sama membina antara muka pengguna aplikasi web moden. 1) HTML mentakrifkan struktur kandungan dan semantik, dan React membina antara muka dinamik melalui komponenisasi. 2) Komponen React Gunakan sintaks JSX untuk membenamkan HTML untuk mencapai rendering pintar. 3) Kitaran Hayat Komponen Menguruskan Rendering HTML dan Kemas kini secara dinamik mengikut keadaan dan atribut. 4) Gunakan komponen untuk mengoptimumkan struktur HTML dan meningkatkan keupayaan. 5) Pengoptimuman prestasi termasuk mengelakkan penyampaian yang tidak perlu, menggunakan atribut utama, dan menjaga tanggungjawab tunggal komponen.

React and the Frontend: Membina Pengalaman InteraktifReact and the Frontend: Membina Pengalaman InteraktifApr 11, 2025 am 12:02 AM

React adalah alat pilihan untuk membina pengalaman front-end interaktif. 1) React memudahkan pembangunan UI melalui komponen dan DOM maya. 2) Komponen dibahagikan kepada komponen fungsi dan komponen kelas. Komponen fungsi adalah lebih mudah dan komponen kelas menyediakan lebih banyak kaedah kitaran hayat. 3) Prinsip kerja React bergantung kepada algoritma DOM dan perdamaian maya untuk meningkatkan prestasi. 4) Pengurusan negeri menggunakan useState atau ini. Kaedah kitaran hayat seperti ComponentDidMount digunakan untuk logik tertentu. 5) Penggunaan asas termasuk membuat komponen dan pengurusan negeri, dan penggunaan lanjutan melibatkan cangkuk tersuai dan pengoptimuman prestasi. 6) Kesalahan biasa termasuk kemas kini status yang tidak betul dan isu prestasi, kemahiran debugging termasuk menggunakan reactdevtools dan sangat baik

React and the Frontend Stack: Alat dan TeknologiReact and the Frontend Stack: Alat dan TeknologiApr 10, 2025 am 09:34 AM

React adalah perpustakaan JavaScript untuk membina antara muka pengguna, dengan komponen terasnya dan pengurusan negeri. 1) Memudahkan pembangunan UI melalui komponen dan pengurusan negeri. 2) Prinsip kerja termasuk perdamaian dan rendering, dan pengoptimuman dapat dilaksanakan melalui React.Memo dan Usememo. 3) Penggunaan asas adalah untuk membuat dan membuat komponen, dan penggunaan lanjutan termasuk menggunakan cangkuk dan konteksapi. 4) Kesalahan biasa seperti kemas kini status yang tidak betul, anda boleh menggunakan ReactDevTools untuk debug. 5) Pengoptimuman prestasi termasuk menggunakan react.memo, senarai virtualisasi dan codesplitting, dan menyimpan kod yang boleh dibaca dan dikekalkan adalah amalan terbaik.

Peranan React dalam HTML: Meningkatkan Pengalaman PenggunaPeranan React dalam HTML: Meningkatkan Pengalaman PenggunaApr 09, 2025 am 12:11 AM

React menggabungkan JSX dan HTML untuk meningkatkan pengalaman pengguna. 1) JSX membenamkan HTML untuk menjadikan pembangunan lebih intuitif. 2) Mekanisme DOM maya mengoptimumkan prestasi dan mengurangkan operasi DOM. 3) UI pengurusan berasaskan komponen untuk meningkatkan kebolehkerjaan. 4) Pengurusan negeri dan pemprosesan acara meningkatkan interaktiviti.

Komponen React: Membuat unsur -unsur yang boleh diguna semula di HTMLKomponen React: Membuat unsur -unsur yang boleh diguna semula di HTMLApr 08, 2025 pm 05:53 PM

Komponen React boleh ditakrifkan oleh fungsi atau kelas, merangkumi logik UI dan menerima data input melalui prop. 1) Tentukan komponen: Gunakan fungsi atau kelas untuk mengembalikan elemen bertindak balas. 2) Rendering Component: React Call Render Kaedah atau Melaksanakan Komponen Fungsi. 3) Komponen multiplexing: Lulus data melalui prop untuk membina UI yang kompleks. Pendekatan kitaran hayat komponen membolehkan logik dilaksanakan pada peringkat yang berbeza, meningkatkan kecekapan pembangunan dan pemeliharaan kod.

Tujuan mod yang ketatTujuan mod yang ketatApr 02, 2025 pm 05:51 PM

React Mode Strict adalah alat pembangunan yang menyoroti isu -isu yang berpotensi dalam aplikasi React dengan mengaktifkan cek tambahan dan amaran. Ia membantu mengenal pasti kod warisan, hayat yang tidak selamat, dan kesan sampingan, menggalakkan amalan reaksi moden.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.