Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa \'ini\' Tidak Merujuk kepada Fungsi Panggilan dalam Panggilan Balik JavaScript?

Mengapa \'ini\' Tidak Merujuk kepada Fungsi Panggilan dalam Panggilan Balik JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-11-04 05:21:01884semak imbas

Why Doesn't 'this' Refer to the Calling Function in JavaScript Callbacks?

Apabila ini Berhujah: Memahami 'ini' dalam Fungsi Panggilan Balik

Dalam JavaScript, nilai ini dalam panggilan fungsi ditentukan oleh konteks di mana fungsi itu dilaksanakan. Walau bagaimanapun, apabila menyerahkan ini sebagai hujah, peraturan boleh menjadi rumit.

Secara khusus, senario berikut timbul: apabila fungsi panggil balik diluluskan sebagai hujah, mengapa ini tidak ditetapkan kepada fungsi yang memanggil panggilan balik?

Memahami Hierarki 'ini'

Untuk memahami mengapa ini ditetapkan di tempatnya, kita perlu mempertimbangkan hierarki panggilan fungsi:

  • obj.prepareRandomFunction() menetapkan ini kepada obj (peraturan #2 daripada jawapan).
  • randomFunction(this.sumData.bind(this)) melepasi this.sumData.bind(this ) sebagai hujah (peraturan #1).
  • Di dalam randomFunction, panggil balik(data) menetapkan ini kepada objek global (peraturan #1).

Walau bagaimanapun, sebelum randomFunction memanggil panggil balik, ia menggunakan this.sumData.bind(this) untuk mencipta fungsi baharu (peraturan #5). Fungsi baharu ini memanggil fungsi panggil balik asal, tetapi kini dengan terikat ini kepada obj (argumen diluluskan untuk mengikat).

Implikasi untuk Fungsi Panggilan Balik

Apabila menghantar kaedah sebagai panggilan balik, adalah penting untuk memahami bahawa ia tidak akan dipanggil sebagai obj.method(). Ini bermakna ini tidak akan mempunyai nilai yang betul dalam fungsi panggil balik. Untuk menyelesaikan isu ini, anda boleh menggunakan bind() untuk menetapkan nilai ini dalam panggilan balik.

Nota Berguna Lain

  • Peraturan #6 dalam jawapannya menerangkan bagaimana fungsi anak panah ES6 mengekalkan nilai leksikal semasa ini, walaupun dalam fungsi panggil balik.
  • .apply() dan .call() boleh digunakan untuk membuat panggilan fungsi baharu dengan nilai khusus ini.
  • bind() boleh digunakan untuk mencipta fungsi baharu yang memanggil fungsi asal dengan nilai tersuai ini.
  • Memahami sifat kompleks ini adalah penting untuk pengekodan JavaScript yang berkesan dan untuk menguasai konsep seperti panggilan balik.

Atas ialah kandungan terperinci Mengapa \'ini\' Tidak Merujuk kepada Fungsi Panggilan dalam Panggilan Balik 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