Mengapa Fungsi Saya Tidak Dijadualkan oleh setTimeout Dilaksanakan Serta-merta?
Kod anda bertujuan untuk menguji pelayan proksi menggunakan fungsi setTimeout untuk memanggil doRequest dengan selang 10 saat. Anehnya, fungsi tersebut dilaksanakan serta-merta dan bukannya mengikut jadual yang dimaksudkan.
Memahami Isu
Masalahnya terletak pada cara anda menghantar fungsi doRequest ke setTimeout. Apabila anda menentukan fungsi sebagai hujah pertama, seperti dalam setTimeout(doRequest(url, proxys[proxy]), proxytimeout), fungsi tersebut akan digunakan serta-merta.
Penyelesaian
Untuk menyelesaikan isu ini, anda mempunyai tiga pilihan:
Lulus hujah sebagai parameter berasingan:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
Gunakan ungkapan rentetan:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
Tentukan fungsi tanpa nama dalam a penutupan:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
Pilihan pertama diutamakan kerana ia lebih jelas dan lebih jelas. Pilihan kedua kurang diingini kerana sifatnya yang "godam", manakala pilihan ketiga boleh menjadi rumit untuk difahami tetapi menghalang nilai daripada berubah dalam gelung.
Atas ialah kandungan terperinci Mengapa Fungsi `setTimeout` Saya Melaksanakan Serta-merta Daripada Pada Masa yang Dijadualkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!