>웹 프론트엔드 >JS 튜토리얼 >'setTimeout' 기능이 예약된 시간이 아닌 즉시 실행되는 이유는 무엇입니까?

'setTimeout' 기능이 예약된 시간이 아닌 즉시 실행되는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-12 13:40:01773검색

Why Is My `setTimeout` Function Executing Immediately Instead of at a Scheduled Time?

왜 내 함수가 setTimeout에 의해 예약되어 즉시 실행되지 않습니까?

귀하의 코드는 setTimeout 함수를 사용하여 doRequest를 호출하여 프록시 서버를 테스트하려고 합니다. 10초 간격으로. 이상하게도 예정된 일정을 따르지 않고 함수가 바로 실행됩니다.

문제 이해

문제는 doRequest 함수를 setTimeout에 전달하는 방법에 있습니다. setTimeout(doRequest(url, Proxys[proxy]), Proxytimeout)과 같이 첫 번째 인수로 함수를 지정하면 해당 함수가 즉시 호출됩니다.

솔루션

문제를 해결하려면 세 가지 옵션이 있습니다.

  1. 인수를 별도의 매개변수로 전달합니다.

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
  2. 문자열 표현식 사용:

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
  3. 클로저 내의 익명 함수 정의:

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

첫 번째 옵션이 더 명확하고 명시적이므로 선호됩니다. 두 번째 옵션은 "해킹" 특성으로 인해 덜 바람직하고, 세 번째 옵션은 이해하기 복잡할 수 있지만 루프 내에서 값이 변경되는 것을 방지합니다.

위 내용은 'setTimeout' 기능이 예약된 시간이 아닌 즉시 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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