Rumah > Artikel > hujung hadapan web > Apakah maksud penutupan javascript?
Dalam JavaScript, penutupan merujuk kepada fungsi; apabila dua fungsi bersarang antara satu sama lain, fungsi dalaman ialah penutupan. Badan penutup biasa ialah fungsi dengan struktur bersarang; fungsi dalaman merujuk kepada anggota peribadi fungsi luar, dan pada masa yang sama fungsi dalaman dirujuk oleh dunia luar Apabila fungsi luar dipanggil, penutupan terbentuk.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.
Apakah penutupan itu? Apabila dua fungsi bersarang antara satu sama lain, fungsi dalaman adalah penutupan.
Prinsip pembentukanApabila fungsi dipanggil, objek aktiviti konteks sementara akan dijana. Ia ialah objek peringkat atas skop fungsi Semua kaedah peribadi, pembolehubah, parameter, fungsi peribadi, dll. dalam skop akan wujud sebagai atribut objek aktif konteks. Selepas fungsi dipanggil, objek aktif konteks akan dikeluarkan serta-merta secara lalai untuk mengelakkan daripada menduduki sumber sistem. Walau bagaimanapun, jika pembolehubah persendirian, parameter, fungsi persendirian, dsb. dalam fungsi dirujuk oleh dunia luar, objek aktif konteks akan terus wujud buat sementara waktu sehingga semua rujukan luaran dibatalkan.
Namun, skop fungsi ditutup dan tidak boleh diakses oleh dunia luar. Jadi dalam keadaan apakah dunia luar boleh mengakses ahli persendirian dalam sesuatu fungsi?
Mengikut rantai skop, fungsi dalaman boleh mengakses ahli peribadi fungsi luar. Jika fungsi dalaman merujuk kepada ahli peribadi fungsi luar, dan fungsi dalaman diteruskan ke dunia luar, atau terbuka kepada dunia luar, maka badan penutup terbentuk. Fungsi luaran ini ialah badan penutup Selepas ia dipanggil, objek aktif tidak akan dibatalkan buat sementara waktu, dan sifatnya akan terus wujud Ahli peribadi fungsi luaran boleh dibaca dan ditulis secara berterusan melalui fungsi dalaman.
Struktur penutupBadan penutup biasa ialah fungsi struktur bersarang. Fungsi dalaman merujuk kepada ahli peribadi fungsi luar, dan pada masa yang sama fungsi dalaman dirujuk oleh dunia luar Apabila fungsi luar dipanggil, penutupan terbentuk. Fungsi ini juga dipanggil fungsi penutupan. Berikut ialah struktur penutupan biasa.
Proses penghuraian diterangkan secara ringkas seperti berikut:function f(x) { //外部函数 return function (y) { //内部函数,通过返回内部函数,实现外部引用 return x + y; //访问外部函数的参数 }; } var c = f(5); //调用外部函数,获取引用内部函数 console.log(c(6)); //调用内部函数,原外部函数的参数继续存在
Semasa tempoh pra-penyusunan skrip JavaScript, fungsi yang diisytiharkan f dan pembolehubah c adalah pertama secara leksikal pra -dikupas.
Semasa pelaksanaan JavaScript, panggil fungsi f dan masukkan nilai 5.
Apabila menghuraikan fungsi f, persekitaran pelaksanaan (skop fungsi) dan objek aktif akan dibuat, dan parameter, pembolehubah persendirian dan fungsi dalaman akan dipetakan kepada atribut objek aktif.
Parameter x mempunyai nilai 5 dan memetakan kepada sifat x objek aktif.
Fungsi dalaman merujuk parameter x melalui rantai skop, tetapi masih belum dilaksanakan.
Selepas fungsi luaran dipanggil, ia kembali kepada fungsi dalaman, menyebabkan fungsi dalaman dirujuk oleh pembolehubah luaran c.
Penghuraikan JavaScript mengesan bahawa sifat objek aktif fungsi luaran dirujuk oleh dunia luar dan tidak boleh menyahdaftar objek aktif, jadi objek itu terus wujud dalam ingatan.
Apabila c dipanggil, iaitu, apabila fungsi dalam dipanggil, anda boleh melihat bahawa nilai yang disimpan dalam parameter x fungsi luar terus wujud. Dengan cara ini, operasi seterusnya boleh dilaksanakan dan x y=5=6=11 dikembalikan.
Memandangkan objek panggilan tidak boleh dinyahdaftarkan selepas fungsi dipanggil, sumber sistem akan diduduki dengan mudah menyebabkan masalah kebocoran. Penyelesaian: Gunakan penutupan dengan berhati-hati dan jangan menyalahgunakannya.
Disebabkan peranan penutupan, nilai yang disimpan adalah dinamik dan pengecualian atau ralat mungkin berlaku dengan mudah jika tidak dikendalikan dengan betul.
[Cadangan berkaitan:
tutorial pembelajaran javascriptAtas ialah kandungan terperinci Apakah maksud penutupan javascript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!