Rumah > hujung hadapan web > tutorial js > Kaedah Javascript setTimeout - Semua yang anda perlu tahu

Kaedah Javascript setTimeout - Semua yang anda perlu tahu

Patricia Arquette
Lepaskan: 2024-11-10 17:57:03
asal
1036 orang telah melayarinya

Javascript setTimeout method - All you need to know

pengenalan

JavaScript ialah bahasa pengaturcaraan berkuasa yang membolehkan pembangun mencipta aplikasi web dinamik dan interaktif. Satu ciri penting JavaScript ialah fungsi kaedah Javascript setTimeout, yang membolehkan javascript menunggu.

Memahami cara menggunakan setTimeout dengan berkesan adalah penting untuk mengawal masa dan aliran program JavaScript anda. Dalam panduan komprehensif ini, kami akan menyelam jauh ke dalam dunia kaedah Javascript setTimeout dan meneroka pelbagai fungsinya.

Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberikan anda semua pengetahuan yang anda perlukan untuk memanfaatkan potensi penuh setTimeout dalam projek JavaScript anda.

Jadi, Bersedia untuk menguasai seni pemasaan dalam JavaScript dan buka kunci kemungkinan baharu untuk mencipta aplikasi web yang responsif dan cekap.

Mari kita mendalami dunia setTimeout dan temui semua rahsianya!

Prasyarat

Sebelum mendalami dunia setTimeout, adalah berfaedah untuk mempunyai pemahaman asas tentang JavaScript dan konsep asasnya. Kebiasaan dengan pembolehubah, fungsi dan aliran kawalan asas (seperti pernyataan if dan gelung) akan memudahkan untuk memahami konsep yang dibincangkan dalam artikel ini.

Jika anda baru menggunakan JavaScript atau memerlukan penyegaran, terdapat banyak sumber dalam talian yang tersedia untuk mempelajari asasnya. Tapak web seperti MDN Web Docs, W3Schools dan freeCodeCamp menawarkan tutorial dan panduan komprehensif yang boleh membantu anda memulakan perjalanan JavaScript anda.

Selain itu, saya amat mengesyorkan dua buku berikut untuk pemula dalam JavaScript:

Ketua Pengaturcaraan JavaScript Pertama: Panduan Mesra Otak

JavaScript: Panduan Definitif: Kuasai Bahasa Pengaturcaraan Yang Paling Banyak Digunakan di Dunia

(dan ya saya sediakan percuma)

Dengan menyelami sumber ini, anda akan memperoleh asas yang kukuh dalam pengaturcaraan JavaScript, melengkapkan anda dengan pengetahuan yang diperlukan untuk meneroka selok-belok setTimeout dan membuka kunci kemungkinan baharu dalam projek pembangunan web anda.

Jadi, sebelum kita menyelami selok-belok setTimeout, pastikan anda mempunyai asas yang kukuh dalam pengaturcaraan JavaScript.

Setelah anda bersedia, mari terokai kuasa setTimeout dan buka kunci kemungkinan baharu dalam projek pembangunan web anda.

Tujuan setTimeout

Untuk bermula, mari kita fahami tujuan setTimeout dahulu.

setTimeout biasanya digunakan dalam senario di mana anda ingin memperkenalkan kelewatan, menjadualkan acara atau melaksanakan tugas pada selang masa tertentu.

sedikit mengelirukan kan?

Mari kita fahami ini dengan contoh:

Nota: sila elakkan memikirkan sintaksnya buat masa ini. kita akan membincangkan Syntex nanti.

Andaikan anda ingin mengisytiharkan fungsi tetapi bukannya memanggilnya dengan segera, anda mahu memanggilnya selepas tempoh masa tertentu.

Di sinilah setTimeout muncul dalam gambar. Ia menyediakan fungsi untuk menangguhkan pelaksanaan fungsi.

Lihat kod berikut:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, kami mempunyai fungsi yang dipanggil greetUser yang hanya log mesej ucapan ke konsol. Kami mahu menangguhkan pelaksanaan fungsi ini selama 1 saat.

Untuk mencapai ini, kami menggunakan fungsi setTimeout dan lulus fungsi greetUser sebagai argumen pertama dan 1000 sebagai argumen kedua.

Dan itu sahaja!

Apabila anda menjalankan kod ini, ia akan membuatkan javascript menunggu 1 saat dan kemudian mencetak mesej ucapan "Hello, pengguna!" ke konsol.

Sintaks dan Parameter ** setTimeout**

Untuk menggunakan setTimeout dengan berkesan, adalah penting untuk memahami sintaks dan parameternya.

Sintaks asas setTimeout adalah seperti berikut:

setTimeout(function, delay, param1, param2, ...);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Mari kita pecahkan komponen yang berbeza:

Parameter pertama ialah fungsi atau coretan kod yang anda mahu laksanakan selepas kelewatan yang ditentukan. Ia boleh menjadi fungsi bernama atau fungsi tanpa nama.

Lengah parameter kedua mewakili selang masa dalam milisaat sebelum pelaksanaan kod bermula. Ia menentukan tempoh kelewatan sebelum fungsi yang ditentukan digunakan.

Parameter tambahan, seperti param1, param2 dan sebagainya, adalah pilihan. Anda boleh menggunakannya untuk menghantar argumen kepada fungsi yang dinyatakan dalam parameter pertama.

Parameter setTimeout ini membolehkan anda menyesuaikan gelagat fungsi apabila ia dilaksanakan.

setTimeout() **mengembalikan **timeoutID yang merupakan integer positif yang mengenal pasti pemasa yang dicipta hasil daripada memanggil kaedah. timeoutID boleh digunakan untuk membatalkan tamat masa dengan menghantarnya kepada kaedah clearTimeout() yang akan kita bincangkan dalam artikel lain.

Nota: Jika anda mendapati sintaks mengelirukan, jangan risau!

Dalam bahagian akan datang blog ini, kami akan meneroka pelbagai contoh dan kes penggunaan untuk setiap parameter secara terperinci. Saya memberi jaminan bahawa dengan membaca artikel penuh, anda akan mendapat pemahaman yang jelas tentang cara menggunakan setTimeout dengan berkesan.

Jadi, bersabar dan teruskan membaca untuk membuka kunci potensi penuh fungsi JavaScript yang berkuasa ini.

setTimeout pecahan kod

Saya tahu anda sudah mendapat idea tentang perkara yang berlaku pada kod yang kami gunakan sebelum ini. Tetapi Untuk mengukuhkan pemahaman kita, mari kita pecahkan kod bersama-sama:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam coretan kod ini:

  1. Kami mentakrifkan fungsi yang dipanggil greetUser menggunakan kata kunci fungsi. Fungsi ini bertanggungjawab untuk mencetak mesej ucapan ke konsol.

  2. Kami menggunakan fungsi setTimeout untuk menjadualkan pelaksanaan fungsi greetUser selepas kelewatan yang ditentukan. Kelewatan ditetapkan kepada 1000 milisaat, yang bersamaan dengan 1 saat.

  3. Argumen pertama yang diserahkan kepada setTimeout ialah rujukan fungsi greetUser. Ini memberitahu setTimeout yang berfungsi untuk dilaksanakan selepas kelewatan yang ditentukan.

  4. Argumen kedua 1000 mewakili kelewatan dalam milisaat. Ia menentukan tempoh masa sebelum pelaksanaan kod bermula.

Dengan menggunakan setTimeout, kami mengarahkan JavaScript tunggu 1 saat dan kemudian menggunakan fungsi greetUser. Akibatnya, mesej ucapan "Hello, pengguna!" akan dicetak pada konsol.

Menggunakan fungsi tanpa nama sebagai panggilan balik

Dalam contoh kod sebelumnya, kami menggunakan fungsi bernama sebagai fungsi panggil balik dalam fungsi setTimeout.

Walau bagaimanapun, setTimeout juga membenarkan anda menyediakan fungsi tanpa nama sebagai panggilan balik yang akan dilaksanakan selepas kelewatan yang ditentukan.

Fungsi tanpa nama biasanya digunakan apabila kod yang akan dilaksanakan adalah mudah dan tidak memerlukan fungsi bernama berasingan.

Ini contohnya:

setTimeout(function, delay, param1, param2, ...);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam kes ini, fungsi tanpa nama berfungsi sebagai panggilan balik. Ia log mesej ke konsol selepas kelewatan 1000 milisaat (atau 1 saat).

Anda boleh menggantikan pernyataan console.log dengan mana-mana kod yang anda mahu laksanakan selepas kelewatan. Menggunakan fungsi tanpa nama sebagai panggil balik dalam setTimeout memberikan fleksibiliti dan membolehkan anda mentakrif dan melaksanakan kod sebaris tanpa memerlukan pengisytiharan fungsi yang berasingan.

Menghantar hujah kepada fungsi panggil balik

Dalam fungsi panggil balik setTimeout, Anda boleh menghantar parameter atau argumen dengan mudah.

Andaikan anda mempunyai fungsi yang menerima parameter dan anda ingin memberikan nilai khusus kepada parameter tersebut apabila fungsi tersebut dilaksanakan selepas kelewatan:

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, fungsi salam dijadualkan menunggu 5 saat (5000 milisaat) dan hujah John dihantar sebagai parameter nama.

Anda boleh melaraskan kelewatan dan nilai hujah mengikut kes penggunaan khusus anda.

Menggunakan pendekatan ini, anda boleh menyesuaikan gelagat fungsi panggil balik dengan menghantar nilai yang berbeza sebagai argumen, membolehkan pelaksanaan kod yang lebih dinamik dan fleksibel.

Berikut ialah beberapa petua tambahan untuk menghantar hujah kepada fungsi panggil balik:

  • Anda boleh menghantar sebarang bilangan argumen kepada fungsi panggil balik.
  • Argumen akan dihantar ke fungsi panggil balik dalam susunan yang sama yang telah dihantar ke setTimeout.
  • Jika anda menghantar nombor pemboleh ubah argumen kepada fungsi panggil balik, anda boleh menggunakan objek argumen untuk mengaksesnya.

Berikut ialah contoh di bawah:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, fungsi processArgs mencetak setiap hujah bersama dengan indeks yang sepadan dengan konsol. Outputnya ialah:

setTimeout(function, delay, param1, param2, ...);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menghantar literal rentetan

Melalukan rentetan sebagai hujah pertama kepada setTimeout dan bukannya fungsi boleh membawa kepada isu yang berpotensi dan secara amnya tidak disyorkan.

Ia mempunyai masalah yang sama seperti menggunakan eval().

Berikut ialah contoh menghantar literal rentetan kepada setTimeout:

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam kes ini, rentetan "console.log('Hello World!');" dinilai sebagai kod dalam konteks global apabila tamat masa tamat tempoh.

Walau bagaimanapun, menggunakan rentetan dengan cara ini boleh menyebabkan masalah kerana penilaian berlaku dalam konteks yang berbeza dan simbol atau pembolehubah setempat mungkin tidak tersedia.

Untuk mengelakkan isu ini, adalah disyorkan untuk menghantar fungsi sebagai argumen pertama untuk setTimeout sebaliknya. Ini memastikan bahawa kod dilaksanakan dalam konteks yang betul dan mempunyai akses kepada simbol tempatan.

Berikut ialah pendekatan alternatif menggunakan fungsi sebagai panggilan balik:

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, fungsi anak panah digunakan sebagai panggilan balik. Fungsi anak panah menyediakan cara ringkas dan lebih selamat untuk melaksanakan kod selepas kelewatan yang ditentukan.

Ia mengelakkan perangkap yang dikaitkan dengan menghantar literal rentetan ke setTimeout dan memastikan kod tersebut dilaksanakan dalam skop yang betul.

Dengan menghantar fungsi dan bukannya rentetan, anda boleh mengekalkan kawalan yang lebih baik ke atas konteks pelaksanaan dan mengelakkan potensi isu dengan mengakses pembolehubah atau simbol setempat.

Nilai kelewatan maksimum

Nilai kelewatan maksimum yang boleh ditetapkan dalam fungsi kaedah Javascript setTimeout bergantung pada pelaksanaan JavaScript dan persekitaran di mana ia dijalankan.

Dalam kebanyakan penyemak imbas moden dan persekitaran JavaScript, nilai kelewatan maksimum ialah lebih kurang 2^31 - 1 milisaat, iaitu kira-kira *24.85 * hari. Jika anda cuba menetapkan nilai kelewatan yang lebih besar daripada maksimum ini, ia akan diapit secara automatik kepada nilai maksimum yang dibenarkan.

Oleh itu, jika anda perlu menjadualkan tugasan yang melebihi kelewatan maksimum ini, anda mungkin perlu mempertimbangkan pendekatan alternatif atau menggunakan gabungan berbilang setTimeout panggilan.

Perlu diambil perhatian bahawa nilai kelewatan yang sangat panjang harus digunakan dengan berhati-hati, kerana nilai tersebut mungkin tidak boleh dipercayai atau praktikal untuk banyak senario dunia sebenar. Jika anda memerlukan pemasaan yang tepat atau kelewatan yang lebih lama, anda mungkin mahu meneroka teknik atau API lain yang direka khusus untuk tujuan sedemikian.

Berikut ialah beberapa pendekatan alternatif untuk penjadualan tugasan yang melebihi nilai kelewatan maksimum:

Gunakan gabungan berbilang setTimeout panggilan. Ini boleh digunakan untuk memecahkan tugas yang panjang kepada bahagian yang lebih kecil yang boleh dijadualkan secara individu.

Gunakan urutan latar belakang atau proses. Ini boleh digunakan untuk melaksanakan tugas yang tidak perlu berinteraksi dengan urutan utama atau antara muka pengguna.

Gunakan pustaka pihak ketiga atau API. Terdapat beberapa perpustakaan dan API tersedia yang menyediakan sokongan untuk penjadualan tugas dengan kelewatan yang lebih lama.

Pendekatan terbaik untuk menjadualkan tugasan yang melebihi nilai kelewatan maksimum akan bergantung pada keperluan khusus tugasan.

Masalah ini

Apabila menggunakan setTimeout dengan kaedah, anda mungkin menghadapi masalah kata kunci ini, di mana nilai dalam kaedah ini berbeza daripada jangkaan anda.

Isu ini timbul kerana cara setTimeout berfungsi dan konteks pelaksanaan berasingan yang digunakannya.

Secara lalai, apabila kaedah digunakan menggunakan setTimeout, nilai ini di dalam kaedah ditetapkan kepada tetingkap (atau global) objek dan bukannya objek yang anda maksudkan.

Tingkah laku ini boleh membawa kepada hasil yang tidak dijangka, seperti yang ditunjukkan dalam contoh berikut:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh di atas, apabila myMethod dipanggil terus pada myArray, nilai ini ditetapkan dengan betul kepada myArray.

Walau bagaimanapun, apabila menggunakan setTimeout dengan myArray.myMethod, nilai ini lalai kepada objek tetingkap.

Untuk mengatasi isu ini, terdapat beberapa penyelesaian yang boleh anda gunakan:

  • Gunakan fungsi pembalut:

Pendekatan biasa ialah menggunakan fungsi pembungkus yang secara eksplisit menetapkan nilai ini yang diingini:

setTimeout(function, delay, param1, param2, ...);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
  • Fungsi anak panah sebagai fungsi pembalut:

Fungsi anak panah tidak mengikat nilai ini sendiri dan sebaliknya mewarisinya daripada skop sekeliling.

Tingkah laku ini boleh dimanfaatkan untuk mengekalkan nilai ini yang dijangkakan dalam fungsi panggil balik.

Berikut ialah contoh menggunakan fungsi anak panah sebagai panggilan balik dengan setTimeout:

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam kes ini, fungsi anak panah tidak mempunyai pengikatan ini sendiri dan sebaliknya menggunakan nilai ini daripada skop sekeliling, iaitu nilai jangkaan myArray.

Menggunakan fungsi anak panah sebagai panggilan balik boleh memberikan penyelesaian yang ringkas dan mudah untuk masalah ini apabila bekerja dengan setTimeout dan kaedah.

Adalah penting untuk ambil perhatian bahawa fungsi anak panah mempunyai beberapa perbezaan dalam tingkah laku berbanding dengan fungsi biasa, jadi adalah penting untuk mempertimbangkan implikasinya dan memilih penyelesaian yang paling sesuai berdasarkan kes penggunaan khusus anda.

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
  • Gunakan ikatan: Pilihan lain ialah menggunakan kaedah bind() untuk mengikat nilai ini yang diingini kepada kaedah:
setTimeout(function, delay, param1, param2, ...);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dengan menggunakan bind(), anda mencipta fungsi baharu yang terikat secara kekal pada nilai yang ditentukan ini, memastikan ia kekal konsisten apabila dihantar ke setTimeout atau dipanggil di tempat lain.

Penyelesaian ini membantu menyelesaikan masalah ini apabila menggunakan setTimeout dengan kaedah, membolehkan anda mengekalkan konteks yang diingini dan mengelakkan tingkah laku yang tidak dijangka.

Tamat masa bersarang

Tama masa bersarang merujuk kepada situasi di mana fungsi setTimeout dipanggil dalam fungsi panggil balik setTimeout yang lain.

Pendekatan ini boleh digunakan untuk mencipta urutan peristiwa bermasa atau untuk memperkenalkan kelewatan antara tindakan berturut-turut.

Berikut ialah contoh untuk menggambarkan tamat masa bersarang:

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini, kita mempunyai tiga fungsi setTimeout bersarang di dalam satu sama lain. Setiap setTimeout mempunyai fungsi panggil balik dan kelewatannya sendiri.

Pertama setTimeout dilaksanakan selepas 500 milisaat, yang kedua dilaksanakan selepas 1000 milisaat (1 saat) daripada tamat masa pertama dan yang ketiga dilaksanakan selepas 2000 milisaat (2 saat) daripada tamat masa kedua.

Apabila anda menjalankan kod ini, ia akan mengeluarkan yang berikut:

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

Salin selepas log masuk
Salin selepas log masuk

Dengan membuat tamat masa bersarang, anda boleh mencipta urutan tindakan yang berlaku pada selang masa yang berbeza. Ini boleh berguna untuk senario di mana anda perlu mengatur satu siri acara atau memperkenalkan kelewatan antara operasi tertentu.

Walau bagaimanapun, adalah penting untuk mengambil kira potensi kerumitan yang boleh timbul daripada tamat masa yang sangat bersarang. Apabila bilangan tamat masa bersarang meningkat, kod tersebut boleh menjadi lebih sukar untuk dibaca dan diselenggara.

Dalam kes sedemikian, pendekatan alternatif seperti menggunakan async/menunggu atau pustaka/rangka kerja yang mengendalikan operasi tak segerak mungkin lebih sesuai.

Ingat untuk menggunakan tamat masa bersarang dengan bijak dan pertimbangkan pilihan lain bergantung pada kerumitan dan keperluan kod anda.

Kesimpulan

Fungsi setTimeout ialah alat asas dalam JavaScript, membolehkan pembangun mencipta pengalaman dinamik dan interaktif di web.

Dengan menguasai setTimeout, anda memperoleh keupayaan untuk mengawal masa, menjadualkan tugas dan membina aplikasi yang canggih. Dengan cerapan dan contoh yang dikongsi dalam blog ini, anda kini dilengkapi untuk memanfaatkan setTimeout dengan berkesan dan membuka kunci potensi penuh keupayaan pemasa JavaScript.

Kini anda mempunyai alat berkuasa yang boleh anda gunakan untuk mengendalikan tugas berkaitan masa, mengurus kelewatan dan mencipta aplikasi web yang lebih interaktif dan dinamik.

Ingat untuk berlatih dan bereksperimen dengan setTimeout untuk mendalami pemahaman anda dan membuka potensi penuhnya. Dengan pengetahuan ini, anda dilengkapi dengan baik untuk memanfaatkan kuasa setTimeout dan meningkatkan kefungsian aplikasi JavaScript anda.

Selamat mengekod :)

sumber

  • https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout

  • https://www.javascripttutorial.net/javascript-bom/javascript-settimeout/

Atas ialah kandungan terperinci Kaedah Javascript setTimeout - Semua yang anda perlu tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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