2011-02-25 2 views
0

나는 다음과 같은 자바 스크립트에서 잘 할 수있는 기능을 가지고 더 이상 자지 마.

누군가가 이유를 말할 수 있습니까? 미리 감사드립니다.

답변

6

setTimeout이 (가) 호출되었지만 전달 된 문자열이 범위에 더 이상 참조하지 않는 time을 포함하지 않으므로 실패했습니다. 해당 선을 다음으로 바꾸어보십시오.

setTimeout(function() { sleep(time); }, time); 

... 정확한 범위를 사용하는 폐쇄를 정의합니다. 또한이 시도 할 수 :

setTimeout(sleep, time, time); 

... sleep에 인수로 time을 전달할 것이다.

+0

정말 멋지다! 당신의 도움으로 효과가있었습니다! – ywenbo

+0

대단히 감사합니다. "수면 (시간)"의 시간이 시간 범위가 아닌 이유를 말씀해 주시겠습니까? 비록 그것이 효과가 있었다고해도 나는 그것을 이해하지 못한다 :-) – ywenbo

+0

@ywenbo : 물론. 문자열을'setTimeout'에 매개 변수로 전달하면, 타임 아웃이 꺼지면'window'의 범위에서'eval'됩니다. 'time'은'window'의 범위에 있지 않을 것입니다; 그것은'sleep'에서 지금 접근 할 수없는 범위에있게 될 것입니다. 클로저를 사용하면 정의 된 위치에서 범위를 상속받습니다. 두 번째 방법을 사용하면 'sleep'을 참조로 전달하고 'timeTime'을 인수로 전달하도록 'setTimeout'에 지시합니다. – icktoofay

2

setTimeoutasynchronously은 코드 실행을 방해하지 않는다는 것을 의미합니다. 아마 당신은 그것을 알았지 만 그 기능은 당신이 선택한 이름대로 살아남을 수 없을 것입니다. 의 is_sleep 변수 false을 타이머를 설정, 절전 함수를 호출 한 다음 즉시 코드 실행을 반환 sleep(3000);

먼저 호출 (sleep(3000); 다음에 오는 무엇 이건)) setTimeout이 제대로 불렀다

경우 (setTimeout(sleep,time,time);) 3 초 후 다시 is_sleeptrue으로 다시 설정하여 호출합니다.