Bolehkah Anda Mengakses Penutupan Fungsi Secara Pengaturcaraan dalam JavaScript?

Patricia Arquette
Lepaskan: 2024-10-29 22:10:03
asal
858 orang telah melayarinya

Can You Access a Function's Closure Programmatically in JavaScript?

Mengakses Penutupan Fungsi

Dalam JavaScript, fungsi membentuk penutupan dengan mengekalkan pautan tersembunyi ke skop lampirannya. Ini menimbulkan persoalan: adakah mungkin untuk mengakses penutupan ini secara pengaturcaraan apabila fungsi tersedia sebagai nilai pembolehubah?

Motivasi utama di sebalik siasatan ini adalah teori, tetapi aplikasi praktikal boleh melibatkan penyenaraian sifat penutupan . Pertimbangkan kod berikut:

<code class="js">var x = (function(){
   var y = 5;
   return function() {
       alert(y);
   };
})();

//access y here with x somehow</code>
Salin selepas log masuk

Matlamatnya adalah untuk mengakses pembolehubah y menggunakan fungsi x.

Mengakses Penutupan

Dalam persekitaran frontend, tempat anda boleh melaksanakan JavaScript anda dalam teg skrip sebelumnya, satu pendekatan adalah dengan melampirkan MutationObserver. Pemerhati ini menunggu teg skrip yang anda mahu periksa (x dalam kes ini) untuk dimasukkan ke dalam dokumen dan mengubah suai kodnya untuk mendedahkan kefungsian yang diingini.

Contohnya:

<code class="js">new MutationObserver((mutations, observer) => {
  // Find the target script tag
  const tamperTarget = document.querySelector('script + script');
  if (!tamperTarget) {
    return;
  }
  observer.disconnect();
  console.log('Target script getting tampered with');

  // Modify the script's content to expose the closure
  tamperTarget.textContent = tamperTarget.textContent.replace(
    'return function',
    'window.y = y; return function'
  );

  setTimeout(() => {
    console.log("Hacked into tamper target's script and found a y of", y);
    console.log('Could also have replaced the local y with another value');
  });
})
  .observe(document.body, { childList: true });</code>
Salin selepas log masuk

Skrip ini melampirkan pemerhati pada dokumen.badan. Apabila teg skrip yang mengandungi fungsi x dimasukkan, pemerhati mencetus dan menggantikan fungsi kembali baris dengan window.y = y; fungsi kembali. Ini mendedahkan pembolehubah y sebagai pembolehubah global (window.y).

Seterusnya, anda boleh mengakses dan memanipulasi pembolehubah y seperti yang dikehendaki. Teknik ini boleh berguna untuk nyahpepijat, ujian dan percubaan dengan penutupan.

Atas ialah kandungan terperinci Bolehkah Anda Mengakses Penutupan Fungsi Secara Pengaturcaraan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!