Q
는
0
A
답변
6
setTimeout
이 (가) 호출되었지만 전달 된 문자열이 범위에 더 이상 참조하지 않는 time
을 포함하지 않으므로 실패했습니다. 해당 선을 다음으로 바꾸어보십시오.
setTimeout(function() { sleep(time); }, time);
... 정확한 범위를 사용하는 폐쇄를 정의합니다. 또한이 시도 할 수 :
setTimeout(sleep, time, time);
... sleep
에 인수로 time
을 전달할 것이다.
2
setTimeout
asynchronously은 코드 실행을 방해하지 않는다는 것을 의미합니다. 아마 당신은 그것을 알았지 만 그 기능은 당신이 선택한 이름대로 살아남을 수 없을 것입니다. 의 is_sleep
변수 false
을 타이머를 설정, 절전 함수를 호출 한 다음 즉시 코드 실행을 반환 sleep(3000);
먼저 호출 (sleep(3000);
다음에 오는 무엇 이건)) setTimeout
이 제대로 불렀다
경우 (setTimeout(sleep,time,time);
) 3 초 후 다시 is_sleep
을 true
으로 다시 설정하여 호출합니다.
관련 문제
정말 멋지다! 당신의 도움으로 효과가있었습니다! – ywenbo
대단히 감사합니다. "수면 (시간)"의 시간이 시간 범위가 아닌 이유를 말씀해 주시겠습니까? 비록 그것이 효과가 있었다고해도 나는 그것을 이해하지 못한다 :-) – ywenbo
@ywenbo : 물론. 문자열을'setTimeout'에 매개 변수로 전달하면, 타임 아웃이 꺼지면'window'의 범위에서'eval'됩니다. 'time'은'window'의 범위에 있지 않을 것입니다; 그것은'sleep'에서 지금 접근 할 수없는 범위에있게 될 것입니다. 클로저를 사용하면 정의 된 위치에서 범위를 상속받습니다. 두 번째 방법을 사용하면 'sleep'을 참조로 전달하고 'timeTime'을 인수로 전달하도록 'setTimeout'에 지시합니다. – icktoofay