Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menghantar Konteks dengan Betul kepada Panggilan Balik `setTimeout`?

Bagaimanakah Saya Boleh Menghantar Konteks dengan Betul kepada Panggilan Balik `setTimeout`?

Patricia Arquette
Lepaskan: 2024-12-25 22:25:23
asal
292 orang telah melayarinya

How Can I Correctly Pass Context to a `setTimeout` Callback?

Lepas Konteks ke setTimeout Panggilan Balik

Mengirim konteks yang betul ke setTimeout panggil balik boleh menjadi mencabar, terutamanya apabila bekerja dengan kaedah objek. Pada mulanya, apabila merujuk perkara ini dalam panggilan balik, ia sering membawa kepada objek global digunakan.

Untuk menyelesaikannya, terdapat beberapa pendekatan:

1. Simpan Rujukan (ES5 dan Terdahulu):

var that = this;
if (this.options.destroyOnHide) {
     setTimeout(function() { that.tip.destroy() }, 1000);
}
Salin selepas log masuk

Teknik ini menggunakan pembolehubah sementara (itu) untuk menyimpan konteks dari mana setTimeout dipanggil.

2 . Kaedah bind (ES5 dan Kemudian):

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }.bind(this), 1000);
}
Salin selepas log masuk

Kaedah bind mencipta fungsi baharu dengan nilai ini yang dipratakrifkan. Dalam kes ini, ini ditetapkan kepada objek sebelum memanggil setTimeout.

3. Fungsi Anak Panah (ES6 dan Kemudian):

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
Salin selepas log masuk

Fungsi anak panah mewarisi konteks leksikalnya ini, yang sama dengan objek yang memanggil setTimeout. Ini menghapuskan keperluan untuk mengikat atau menyimpan ini.

4. Melepasi Argumen kepada setTimeout (HTML5):

if (this.options.destroyOnHide) {
     setTimeout(function(that) { that.tip.destroy() }, 1000, this);
}
Salin selepas log masuk

HTML5 memperkenalkan ciri dalam setTimeout yang membenarkan menghantar argumen tambahan kepada panggilan balik. Di sini, ini diluluskan sebagai hujah dan diakses dalam fungsi panggil balik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Konteks dengan Betul kepada Panggilan Balik `setTimeout`?. 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