Rumah > Artikel > hujung hadapan web > Bolehkah Kami Mengakses Penutupan Fungsi JavaScript secara Program?
Mengakses Penutupan Fungsi JavaScript
Dalam JavaScript, fungsi membentuk penutupan dengan mengekalkan pautan tersembunyi ke skop lampirannya. Ini membolehkan fungsi mengakses pembolehubah dan sumber lain yang ditakrifkan dalam skop itu, walaupun selepas skop telah tamat. Tetapi adakah mungkin untuk mengakses penutupan ini secara pengaturcaraan?
Pertimbangkan contoh berikut:
<code class="js">var x = (function() { var y = 5; return function() { alert(y); }; })();</code>
Dalam kes ini, kami mentakrifkan fungsi x yang mengembalikan fungsi lain dengan akses kepada pembolehubah persendirian y . Matlamatnya adalah untuk mengakses penutupan ini secara pemrograman dan memeriksa sifatnya.
Mendapat Akses kepada Penutupan
Mengakses penutupan fungsi tidak boleh dilakukan secara langsung dalam JavaScript standard. Walau bagaimanapun, terdapat teknik yang boleh membantu kami mencapai ini dalam persekitaran tertentu:
Persekitaran Bahagian Depan:
Dalam persekitaran web bahagian hadapan, kami boleh menggunakan MutationObserver . Dengan memerhatikan DOM untuk teg skrip yang mengandungi fungsi kami, kami boleh mengubah suai kodnya sebaik sahaja ia dimasukkan ke dalam dokumen. Ini membolehkan kami mendedahkan penutupan atau mengubah suai kandungannya.
Pertimbangkan contoh berikut:
<code class="js">new MutationObserver((mutations, observer) => { // Find the target script tag const tamperTarget = document.querySelector('script + script'); if (!tamperTarget) { return; } // Modify the target script's code observer.disconnect(); console.log('Tampering with target script'); tamperTarget.textContent = tamperTarget.textContent.replace( 'return function', 'window.y = y; return function' ); }).observe(document.body, { childList: true });</code>
Pemerhati ini akan mengubah suai skrip sasaran untuk mendedahkan pembolehubah y sebagai pembolehubah global. Kami kemudiannya boleh mengakses pembolehubah ini daripada panggilan balik pemerhati:
<code class="js">setTimeout(() => { console.log("Hacked into tamper target's script and found a y of", y); });</code>
Had:
Adalah penting untuk ambil perhatian bahawa teknik ini adalah eksperimen dan mungkin tidak berfungsi dalam semua kes atau persekitaran. Mereka bergantung pada masa tertentu dan akses kepada kod asas, yang boleh berbeza-beza merentas penyemak imbas dan senario.
Atas ialah kandungan terperinci Bolehkah Kami Mengakses Penutupan Fungsi JavaScript secara Program?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!