왜 내 함수가 setTimeout에 의해 예약되어 즉시 실행되지 않습니까?
귀하의 코드는 setTimeout 함수를 사용하여 doRequest를 호출하여 프록시 서버를 테스트하려고 합니다. 10초 간격으로. 이상하게도 예정된 일정을 따르지 않고 함수가 바로 실행됩니다.
문제 이해
문제는 doRequest 함수를 setTimeout에 전달하는 방법에 있습니다. setTimeout(doRequest(url, Proxys[proxy]), Proxytimeout)과 같이 첫 번째 인수로 함수를 지정하면 해당 함수가 즉시 호출됩니다.
솔루션
문제를 해결하려면 세 가지 옵션이 있습니다.
인수를 별도의 매개변수로 전달합니다.
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
문자열 표현식 사용:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
클로저 내의 익명 함수 정의:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
첫 번째 옵션이 더 명확하고 명시적이므로 선호됩니다. 두 번째 옵션은 "해킹" 특성으로 인해 덜 바람직하고, 세 번째 옵션은 이해하기 복잡할 수 있지만 루프 내에서 값이 변경되는 것을 방지합니다.
위 내용은 'setTimeout' 기능이 예약된 시간이 아닌 즉시 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!