Dalam senario ini, di mana fungsi bertujuan untuk dilaksanakan dengan kelewatan menggunakan setTimeout tetapi sebaliknya dilaksanakan serta-merta, isunya terletak pada cara fungsi itu dihantar ke setTimeout.
Untuk menyelesaikan isu ini, terdapat tiga pendekatan untuk memastikan ia dilaksanakan dengan kelewatan yang diingini:
Luluskan Argumen Secara Individu:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
Borang ini melepasi fungsi dahulu, diikuti dengan tamat masa dan hujah fungsi.
Gunakan Rentetan Tersurat:
setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);
Di sini, rentetan tersurat disediakan, yang akan dinilai pada masa pelaksanaan.
Penutupan Fungsi Tanpa Nama:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
Pendekatan ini melibatkan fungsi tanpa nama yang memanggil fungsi yang dimaksudkan. Penutupan memastikan bahawa nilai yang digunakan dalam fungsi kekal konsisten sepanjang gelung.
Dengan menggunakan mana-mana kaedah ini, anda boleh menjadualkan pelaksanaan fungsi doRequest secara berkesan dengan kelewatan yang ditentukan.
Atas ialah kandungan terperinci Mengapakah fungsi `setTimeout` saya dilaksanakan serta-merta dan bukannya selepas kelewatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!