Rumah > hujung hadapan web > tutorial js > Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?

Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?

Mary-Kate Olsen
Lepaskan: 2024-11-25 12:36:11
asal
200 orang telah melayarinya

Why Does setTimeout Have Different Ways of Calling Functions?

Membedah setTimeout's Parentheses and Quotation Enigma

Apabila menyelidiki peristiwa pemasaan JavaScript, fungsi setTimeout sering menimbulkan kekeliruan disebabkan penggunaannya yang pelbagai . Mari kita jelaskan perbezaan antara tiga cara biasa untuk memanggilnya:

Dengan Tanda Kurung

setTimeout("alertMsg()", 3000);
Salin selepas log masuk

Dalam sintaks ini, fungsi dihantar sebagai rentetan dalam dua kali ganda petikan. JavaScript mentafsir ini sebagai rentetan kod yang akan dilaksanakan selepas masa yang ditentukan. Penggunaan ini tidak digalakkan kerana kelemahan keselamatan.

Tanpa Petikan dan Tanda Kurung

setTimeout(alertMsg, 3000);
Salin selepas log masuk

Pendekatan yang lebih bersih ini meneruskan fungsi secara langsung sebagai rujukan. Rujukan boleh menjadi fungsi bernama, fungsi tanpa nama, atau pembolehubah yang menunjuk ke fungsi. Ini ialah kaedah pilihan kerana ia menghapuskan kemungkinan kebimbangan keselamatan dan memudahkan kod.

Hanya Menggunakan Petikan

setTimeout("alertMsg", 3000);
Salin selepas log masuk

Dalam sintaks pelik ini, rentetan dihantar tanpa kurungan. Kaedah ini ditamatkan dan boleh membawa kepada tingkah laku yang tidak dapat diramalkan.

Untuk memanggil fungsi dengan argumen dalam setTimeout, anda boleh sama ada membenamkan panggilan dalam panggilan balik atau menentukan argumen dalam sintaks yang terakhir (tidak serasi dengan penyemak imbas) :

setTimeout(function() { foo(arg1, arg2); }, 1000);
Salin selepas log masuk

atau

setTimeout(foo, 2000, arg1, arg2);
Salin selepas log masuk

Ingat, konteks panggil balik (ini kata kunci) lalai kepada objek global. Untuk mengubah suainya, gunakan kaedah bind():

setTimeout(function() { this === YOUR_CONTEXT; // true }.bind(YOUR_CONTEXT), 2000);
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa menghantar rentetan kepada setTimeout amat tidak digalakkan kerana risiko keselamatan. Sentiasa lulus rujukan fungsi secara langsung untuk mengekalkan keselamatan dan memastikan pelaksanaan boleh diramal.

Atas ialah kandungan terperinci Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?. 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