


Bagaimana cara menangani dengan betul ini dalam penutupan?
May 21, 2025 pm 09:15 PMKaedah untuk mengendalikan dengan betul ini menunjuk dalam penutupan JavaScript termasuk: 1. Gunakan fungsi anak panah, 2. Gunakan kaedah mengikat, 3. Gunakan pembolehubah untuk menyimpan ini. Kaedah ini memastikan bahawa fungsi intrinsik ini betul menunjuk kepada konteks fungsi luaran.
Pengenalan
Hari ini kita akan membincangkan masalah yang sering menyusahkan dalam perkembangan JavaScript: bagaimana untuk menangani dengan betul this
dalam penutupan. Saya tahu bahawa banyak pemaju sering keliru apabila menghadapi masalah ini, tetapi jangan risau, saya akan membawa anda untuk menyelesaikan langkah misteri ini dengan langkah. Melalui artikel ini, anda akan belajar bagaimana untuk mengawal secara fleksibel this
dalam penutupan dan menguasai beberapa petua praktikal dan amalan terbaik.
Semak pengetahuan asas
Dalam JavaScript, this
adalah kata kunci yang sangat istimewa, dan penunjuknya akan berbeza mengikut konteks yang berbeza. Apabila kita bercakap mengenai penutupan, masalah menunjuk this
menjadi sangat rumit. Penutupan adalah fungsi yang mempunyai kebenaran untuk mengakses pembolehubah dalam skop fungsi lain, biasanya dilaksanakan dengan menentukan fungsi lain di dalam fungsi.
Sebelum membincangkan penunjuk this
, mari kita semak tingkah laku asas this
:
- Dalam persekitaran global,
this
menunjukkan objek global (window
dalam penyemak imbas danglobal
dalam node.js). - Apabila memanggil fungsi, arah
this
bergantung kepada kaedah memanggil fungsi, seperti panggilan langsung, panggilan melalui kaedah objek, panggilan menggunakan kaedahcall
atauapply
, dll.
Selepas memahami asas-asas ini, kita dapat meneroka lebih mendalam bagaimana untuk this
dengan betul.
Konsep teras atau analisis fungsi
Masalah menunjuk this
dalam penutupan
Dalam penutupan, masalah yang ditunjuk oleh this
adalah kerana fungsi dalaman this
tidak disegerakkan dengan fungsi luar this
. Mari lihat contoh mudah:
fungsi outerfunction () { this.name = 'oUter'; fungsi innerfunction () { console.log (this.name); // Apakah perkara ini di sini? } InnerFunction (); } <p>const obj = { Nama: 'Objek' };</p><p> OUTERFUNCTION.CALL (OBJ); // output: Undefined</p>
Dalam contoh ini, this
dalam innerFunction
menunjuk kepada objek global, bukannya this
outerFunction
. Ini kerana dalam mod bukan tegas, this
dalam fungsi dalaman menunjuk kepada objek global secara lalai.
Penyelesaian
Untuk mengendalikan penunjuk this
dengan betul dalam penutupan, kita boleh menggunakan kaedah berikut:
Gunakan fungsi anak panah
Ciri penting fungsi anak panah ialah mereka tidak mempunyai this
sendiri, tetapi mewarisi skop luar this
. Ini menjadikan fungsi anak panah sangat berguna dalam penutupan:
fungsi outerfunction () { this.name = 'oUter'; const innerfunction = () => { console.log (this.name); // Ini di sini menunjukkan perkara ini }; InnerFunction (); } <p>const obj = { Nama: 'Objek' };</p><p> OUTERFUNCTION.CALL (OBJ); // output: luar</p>
Gunakan kaedah bind
Kaedah bind
membolehkan kita membuat fungsi baru yang fungsi this
terikat pada nilai yang ditentukan:
fungsi outerfunction () { this.name = 'oUter'; fungsi innerfunction () { console.log (this.name); } innerfunction.bind (ini) (); } <p>const obj = { Nama: 'Objek' };</p><p> OUTERFUNCTION.CALL (OBJ); // output: luar</p>
Simpan this
dengan pembolehubah
Satu lagi kaedah biasa adalah untuk menyelamatkan this
dari fungsi luaran ke dalam pembolehubah dan kemudian gunakan pembolehubah ini dalam fungsi dalaman:
fungsi outerfunction () { this.name = 'oUter'; const self = ini; fungsi innerfunction () { console.log (self.name); } InnerFunction (); } <p>const obj = { Nama: 'Objek' };</p><p> OUTERFUNCTION.CALL (OBJ); // output: luar</p>
Contoh penggunaan
Penggunaan asas
Mari kita lihat contoh aplikasi praktikal, katakan kita ingin membuat kelas kaunter, di mana kaedah digunakan dalam penutupan:
kaunter kelas { pembina () { this.count = 0; } <pre class='brush:php;toolbar:false;'>kenaikan () { setTimeout (() => { this.count; console.log (this.count); }, 1000); }
}
const counter = counter baru (); counter.increment (); // output selepas 1 saat: 1
Dalam contoh ini, kami menggunakan fungsi anak panah untuk memastikan titik this
kepada contoh Counter
.
Penggunaan lanjutan
Dalam senario yang lebih kompleks, kita mungkin perlu mengubah this
secara dinamik dalam penutupan ini. Sebagai contoh, katakan kami mempunyai pengendali acara klik butang dan kami ingin mengemas kini status objek apabila diklik:
Kelas ButtonHandler { pembina (butang) { this.button = butang; this.clicks = 0; this.button.addeventListener ('klik', this.handleclick.bind (ini)); } <pre class='brush:php;toolbar:false;'>handleclick () { this.clicks; console.log (`Button diklik $ {this.clicks} times`); }
}
const button = document.getElementById ('MyButton'); const handler = new ButtonHandler (butang);
Dalam contoh ini, kami menggunakan kaedah bind
untuk memastikan this
dalam kaedah handleClick
menunjuk kepada contoh ButtonHandler
.
Kesilapan biasa dan tip debugging
Kesalahan biasa apabila berurusan dengan penunjuk this
dalam penutupan termasuk:
- Lupa menggunakan fungsi anak panah atau kaedah
bind
, menyebabkanthis
menunjuk kepada objek global. - Dalam mod yang ketat,
this
dalam fungsi dalaman tidak akanundefined
dan bukannya objek global.
Petua debug:
- Gunakan
console.log(this)
untuk mengeluarkan nilaithis
di lokasi yang berbeza untuk membantu anda memahami penunjukthis
. - Gunakan debugging Breakpoint dalam alat pembangunan untuk mengesan perubahan secara beransur -ansur dalam
this
.
Pengoptimuman prestasi dan amalan terbaik
Terdapat beberapa amalan terbaik yang perlu diperhatikan ketika berurusan dengan penunjuk this
dalam penutupan:
- Gunakan fungsi anak panah : Fungsi anak panah tidak hanya dapat menyelesaikan masalah penunjuk
this
, tetapi juga membuat kod lebih ringkas. - Elakkan terlalu banyak
bind
: Walaupun kaedahbind
berfungsi, berlebihan meningkatkan penggunaan memori, kerana fungsi baru dibuat dengan setiap panggilan. - Pastikan kod anda boleh dibaca : Apabila menggunakan penutupan, pastikan kod anda berstruktur dan baik supaya pemaju lain dapat memahami niat anda dengan mudah.
Perbandingan Prestasi
Mari bandingkan prestasi kaedah yang berbeza:
fungsi testArrowFunction () { const obj = { Nama: 'Ujian' }; const func = () => { console.log (this.name); }; untuk (biarkan i = 0; i <1000000; i) { func.call (obj); } } <p>fungsi testbindmethod () { const obj = { Nama: 'Ujian' }; fungsi func () { console.log (this.name); } const boundfunc = func.bind (obj); untuk (biarkan i = 0; i <1000000; i) { boundfunc (); } }</p><p> fungsi testvariablemethod () { const obj = { Nama: 'Ujian' }; fungsi func () { const self = ini; fungsi kembali () { console.log (self.name); }; } const inNerFunc = func.call (obj); untuk (biarkan i = 0; i <1000000; i) { innerfunc (); } }</p><p> konsol.time ('fungsi anak panah'); testArrowFunction (); Console.TimeEnd ('Function Arrow');</p><p> Console.Time ('Kaedah Bind'); testBindMethod (); Console.TimeEnd ('Kaedah Bind');</p><p> konsol.time ('kaedah pembolehubah'); testvariablemethod (); Console.TimeEnd ('Kaedah Variabel');</p>
Jalankan kod ini dan anda akan mendapati bahawa prestasi fungsi anak panah biasanya adalah yang terbaik, kerana ia tidak memerlukan membuat contoh fungsi baru.
Melangkah ke titik lubang dan berfikir secara mendalam
Terdapat beberapa perangkap biasa yang perlu diperhatikan ketika berurusan dengan penunjuk this
dalam penutupan:
- Batasan fungsi anak panah : Fungsi anak panah tidak boleh digunakan sebagai pembina kerana mereka tidak mempunyai
this
sendiri. Dalam senario di mana pembina diperlukan, anda perlu menggunakan definisi fungsi tradisional. - Overhead kaedah
bind
: Walaupun kaedahbind
dapat menyelesaikan masalah penunjukthis
dengan berkesan, ia mewujudkan contoh fungsi baru, yang mungkin menjadi masalah dalam aplikasi sensitif prestasi. - Pembolehubah menyelamatkan kerumitan
this
: Pendekatan ini, sementara berkesan, boleh menyebabkan pengurangan pembacaan kod dalam kod kompleks, sebagai pemahaman tambahan tentang peranan pembolehubah sepertiself
atauthat
.
Berfikir secara mendalam:
- Pilihan Corak Reka Bentuk : Apabila merancang kod, pertimbangkan untuk menggunakan corak reka bentuk seperti corak modul atau pelaksanaan segera ekspresi fungsi (IIFES), yang dapat membantu anda mengurus skop dengan lebih baik dan menunjuk
this
. - Kesan mod ketat : Dalam mod yang ketat, tingkah laku lalai
this
akan berbeza -beza, dan memahami perbezaan ini dapat membantu anda menulis lebih banyak kod yang mantap. - Kurikulasi Fungsi : Dalam sesetengah kes, kurikulasi fungsi dapat membantu anda mengurus penunjuk
this
dengan lebih baik sambil meningkatkan kebolehgunaan semula kod dan fleksibiliti.
Melalui kaedah dan teknik ini, anda boleh mengawal secara fleksibel dalam penutupan this
dan menulis lebih cekap dan lebih mudah untuk mengekalkan kod JavaScript. Semoga artikel ini dapat membantu anda memahami dan menyelesaikan masalah penunjuk this
dalam penutupan.
Atas ialah kandungan terperinci Bagaimana cara menangani dengan betul ini dalam penutupan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Untuk mengendalikan muat naik fail PHP dengan selamat, anda perlu mengesahkan sumber dan jenis, mengawal nama fail dan laluan, menetapkan sekatan pelayan, dan memproses fail media dua kali. 1. Sahkan sumber muat naik untuk mengelakkan CSRF melalui token dan mengesan jenis mime sebenar melalui finfo_file menggunakan kawalan putih; 2. Namakan semula fail ke rentetan rawak dan tentukan pelanjutan untuk menyimpannya dalam direktori bukan web mengikut jenis pengesanan; 3. Konfigurasi PHP mengehadkan saiz muat naik dan direktori sementara Nginx/Apache melarang akses ke direktori muat naik; 4. Perpustakaan GD menyambung semula gambar -gambar untuk membersihkan data yang berpotensi.

Inphp, variablesarepassedbyvalueDefault, arequFunctionsorassignmentsReceiveacopyofthedata, sementara

Perdagangan kontrak bulatan mata wang adalah kaedah perdagangan derivatif yang menggunakan sedikit dana untuk mengawal aset dengan nilai yang lebih besar. Ia membolehkan peniaga membuat spekulasi mengenai trend harga aset crypto tanpa benar -benar memiliki mereka. Memasuki pasaran kontrak memerlukan pemahaman operasi asas dan konsep yang berkaitan.

Versi rasmi terkini platform perdagangan mata wang maya v6.129.0 adalah aplikasi perdagangan aset digital profesional dan selamat yang dibuat untuk pengguna Android. Ia menyediakan keadaan pasaran yang kaya, fungsi perdagangan yang mudah dan perlindungan keselamatan berganda, dan komited untuk menyediakan pengguna dengan pengalaman perdagangan kelas pertama.

Terhadap latar belakang turun naik kekerasan dalam pasaran cryptocurrency, permintaan pelabur untuk pemeliharaan aset menjadi semakin menonjol. Artikel ini bertujuan untuk menjawab bagaimana untuk melindung nilai risiko secara berkesan dalam lingkaran mata wang bergelora. Ia akan memperkenalkan secara terperinci konsep StableCoin, alat lindung nilai teras, dan menyediakan senarai Top3 StableCoins dengan menganalisis pilihan yang sangat diiktiraf semasa di pasaran. Artikel ini akan menjelaskan cara memilih dan menggunakan stablecoins ini mengikut keperluan mereka sendiri, untuk menguruskan risiko dengan lebih baik dalam persekitaran pasaran yang tidak menentu.

Javanio adalah IOAPI baru yang diperkenalkan oleh Java 1.4. 1) bertujuan untuk penampan dan saluran, 2) mengandungi komponen teras penampan, saluran dan pemilih, 3) menyokong mod tidak menyekat, dan 4) mengendalikan sambungan serentak lebih cekap daripada IO tradisional. Kelebihannya dicerminkan dalam: 1) IO yang tidak menyekat mengurangkan overhead thread, 2) Buffer meningkatkan kecekapan penghantaran data, 3) pemilih menyedari multiplexing, dan 4) memori pemetaan memori sehingga membaca dan menulis fail. Nota Apabila menggunakan: 1) Operasi flip/jelas penampan mudah dikelirukan, 2) Data yang tidak lengkap perlu diproses secara manual tanpa menyekat, 3) Pendaftaran pemilih mesti dibatalkan dalam masa, 4) NIO tidak sesuai untuk semua senario.

Artikel ini akan memberi tumpuan kepada tema stablecoin arbitrage dan menerangkan secara terperinci bagaimana menggunakan kemungkinan spread antara stablecoins seperti BUSD dan TUSD untuk mendapatkan keuntungan. Artikel ini akan mula memperkenalkan prinsip-prinsip asas stablecoin menyebarkan arbitraj, dan kemudian memperkenalkan prosedur operasi tertentu melalui penjelasan langkah demi langkah, dan menganalisis risiko yang terlibat dan perkara-perkara yang perlu diberi perhatian untuk membantu pengguna memahami proses ini dan menyedari bahawa pulangannya tidak stabil dan tidak berubah.

Artikel ini akan membincangkan stablecoins arus perdana di dunia dan menganalisis stablecoins yang mempunyai atribut keengganan risiko "pengganti emas" dalam kitaran ke bawah pasaran (Bear Market). Kami akan menerangkan bagaimana untuk menilai dan memilih alat penyimpanan nilai yang agak stabil dalam pasaran beruang dengan membandingkan nilai pasaran, mekanisme pengesahan, ketelusan, dan menggabungkan pandangan umum secara komprehensif di Internet, dan menerangkan proses analisis ini.
