2012-09-08 7 views
1

'for'를 추가했을 때 왜 'setInterval'이 작동하지 않았습니까? 자바 스크립트 이후왜 내 setInterval이 작동하지 않습니까?

<script> 
    var x=0; 
    setInterval(function() {counter()},1); 
function counter() 
{ 
    x++; 
} 
for(var start=0; start <= 100; start++) 
    { 
     alert("x is "+x+" and start is "+start); 
    } 
</script> 

답변

6

는 "내 콜백을 실행이 메인 스레드가 아무것도하지 않는 다음 시간과 제한 시간이 경과 한"당신의 setInterval을 기본적 의미, 멀티 스레드 (이 경우)이 아니다.

for 루프는 완료 될 때까지 주 스레드를 차단하고 for 루프가 종료 될 때까지 콜백이 발생하지 않도록 각 사용자 입력을 기다리는 101 개의 경고를 표시 할 때까지 종료하지 않습니다. 주 스레드는 "아무것도하지 않음"으로 돌아갈 수 있습니다.

+0

문제는 전적으로 'for'가 아니라 스크립트 실행을 중단시키는 동기 조치 인 '경고'입니다. –

+0

@ FabrícioMatté 예, 감사합니다. 이유에 대한 설명이 약간 부족하여 답변에 대한 의견이 추가되었습니다. –

+0

+1, DOM 0 'alert'에는 사양이 없으며 브라우저가이를 다르게 해석 할 수 있습니다. 예를 들어 OP 간격은 Firefox 15-18의 경고 사이에서 간헐적으로 실행되지만 Chrome에서는 완전히 동기화됩니다. [피들] (http://jsfiddle.net/ult_combo/7vDG8/) –

관련 문제