2010-04-24 2 views
0

왜 다음 코드는 "0 5 10 15 20 ... 100"을 인쇄합니까?자바 닫는 질문

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (pos + 1)*10); 
    })(); 
} 
})(); 

필자는 pos = i를 내림차순으로 선언합니다. 이 코드는 그의 책인 Pro javascript techniques에서 John Resig의 fadeIn() 함수에서 유래했습니다. 당신은 올바른 순서로 시간 제한을 등록하고

답변

7

는 문제 등, 값 (10)가 100ms로 인쇄됩니다, 그래서 그들은 자신의 가치를 위해 초과하고 그래서 당신은

1000MS 가치 100 타이밍 계산을 변경하여 최대 값 (이 경우 100)을 뺍니다.

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (100 - pos + 1)*10); // note the subtraction here 
    })(); 
} 
})();