>웹 프론트엔드 >JS 튜토리얼 >지연을 설정했는데도 setTimeout() 함수가 즉시 실행되는 이유는 무엇입니까?

지연을 설정했는데도 setTimeout() 함수가 즉시 실행되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-14 18:33:01533검색

Why is my setTimeout() function executing immediately, despite setting a delay?

setTimeout을 사용하여 함수 호출 지연 실행

JavaScript에서 setTimeout()을 사용하여 나중에 함수 실행을 예약하는 것은 비동기 프로그래밍의 일반적인 기술입니다. 그러나 지연 예약되었음에도 불구하고 해당 기능이 즉시 실행되는 경우가 있습니다. 효과적인 비동기 실행을 위해서는 setTimeout()의 복잡성을 이해하는 것이 중요합니다.

제공된 컨텍스트에서 creep() 함수는 약 10초 간격으로 doRequest() 함수를 호출하도록 되어 있습니다. 그런데 함수가 바로 실행되는군요.

이 문제를 이해하는 열쇠는 setTimeout() 구문에 있습니다. 함수를 매개변수로 제공할 때 함수 자체를 지정하고 지연을 지정한 다음 함수에 필요한 인수를 지정하는 것이 중요합니다.

가능한 해결 방법:

  1. 기능, 지연 및 인수:

    다음 방식으로 setTimeout()을 호출합니다.

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

    이렇게 하면 doRequest()가 지연 및 필요한 함수와 함께 실행될 함수로 전달됩니다. 인수.

  2. 기능 문자열:

    또는 doRequest()를 평가할 문자열로 전달할 수 있습니다.

    setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);

    이 접근 방식은 괄호가 덜 필요하고 더 간결한 대안을 제공합니다.

  3. 익명함수 클로저:

    루프 내 인수 변경을 방지하기 위해 익명 함수에 doRequest()를 포함합니다.

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);

    이 기술은 클로저 내에서 사용되는 변수가 일관되게 유지되도록 보장합니다. 루프가 진행됨에 따라. 그러나 이전 옵션보다 약간 더 복잡합니다.

특정 요구 사항에 따라 이러한 솔루션은 의도된 지연으로 doRequest() 실행을 효과적으로 예약합니다. JavaScript에서 성공적인 비동기 프로그래밍을 위해서는 setTimeout()의 미묘한 차이를 이해하는 것이 필수적입니다.

위 내용은 지연을 설정했는데도 setTimeout() 함수가 즉시 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.