setTimeout을 사용하여 함수 호출 지연 실행
JavaScript에서 setTimeout()을 사용하여 나중에 함수 실행을 예약하는 것은 비동기 프로그래밍의 일반적인 기술입니다. 그러나 지연 예약되었음에도 불구하고 해당 기능이 즉시 실행되는 경우가 있습니다. 효과적인 비동기 실행을 위해서는 setTimeout()의 복잡성을 이해하는 것이 중요합니다.
제공된 컨텍스트에서 creep() 함수는 약 10초 간격으로 doRequest() 함수를 호출하도록 되어 있습니다. 그런데 함수가 바로 실행되는군요.
이 문제를 이해하는 열쇠는 setTimeout() 구문에 있습니다. 함수를 매개변수로 제공할 때 함수 자체를 지정하고 지연을 지정한 다음 함수에 필요한 인수를 지정하는 것이 중요합니다.
가능한 해결 방법:
기능, 지연 및 인수:
다음 방식으로 setTimeout()을 호출합니다.
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
이렇게 하면 doRequest()가 지연 및 필요한 함수와 함께 실행될 함수로 전달됩니다. 인수.
기능 문자열:
또는 doRequest()를 평가할 문자열로 전달할 수 있습니다.
setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);
이 접근 방식은 괄호가 덜 필요하고 더 간결한 대안을 제공합니다.
익명함수 클로저:
루프 내 인수 변경을 방지하기 위해 익명 함수에 doRequest()를 포함합니다.
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
이 기술은 클로저 내에서 사용되는 변수가 일관되게 유지되도록 보장합니다. 루프가 진행됨에 따라. 그러나 이전 옵션보다 약간 더 복잡합니다.
특정 요구 사항에 따라 이러한 솔루션은 의도된 지연으로 doRequest() 실행을 효과적으로 예약합니다. JavaScript에서 성공적인 비동기 프로그래밍을 위해서는 setTimeout()의 미묘한 차이를 이해하는 것이 필수적입니다.
위 내용은 지연을 설정했는데도 setTimeout() 함수가 즉시 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!