for(;i<5;i++)
{
(function(z){
setTimeout(function(){console.log(z);},2000);})(i);
}
2 초 후에 한 번에 0 1 2 3 4 5를 인쇄합니다. 왜 그렇습니까? 2 초 후에 각 번호를 인쇄하려면 해결책은 무엇입니까?자바 스크립트 코드에서 시간 지연이 작동하지 않습니다.
for(;i<5;i++)
{
(function(z){
setTimeout(function(){console.log(z);},2000);})(i);
}
2 초 후에 한 번에 0 1 2 3 4 5를 인쇄합니다. 왜 그렇습니까? 2 초 후에 각 번호를 인쇄하려면 해결책은 무엇입니까?자바 스크립트 코드에서 시간 지연이 작동하지 않습니다.
귀하의 시간 제한 간격을해야하고 나는 항상 또한 이유 2000+를 이해하는 read the documentation하십시오 그래서 특정 일
var tIds=[];
for(var i=0;i<5;i++) {
(function(z){
tIds[i]=setTimeout(function(){window.console&&console.log(z);},2000*i); //fire 2000,4000,6000
})(i);
}
에 사항 clearTimeout 수 있습니다 각 하나를 저장하기 위해 다른 VAR를 사용 나는 작동하지 않는 것 같습니다
이 코드를 사용해보십시오.
//Referring your code for better understanding..
for(i=0;i<5;i++) {
(function(z){
setTimeout(function(){console.log(z);},2000*z);})(i);
}
"0 1 2 3 4"가 아니라 실제로 "1 2 3 4 5"를 인쇄합니다. 증가 plz 조심하십시오. – neuront
@neuront : 내 실수를 알려 주셔서 감사합니다. 나는 그것을 업데이트했습니다. :) –
당신은 5 비동기, 거의 동시에, 함수의 호출을 발사한다.
당신이 setInterval
를 사용하여 DIFF 접근 방식을 시도해 볼 수도,
var timer = setInterval(function(){printThing();},2000);
var i = 0;
function printThing(){
if(i<=5){
window.console && console.log(i);
++i;
}
else{
clearInterval(timer)
}
}//end function
를 heres 예를 들어 http://jsfiddle.net/W9vS4/2/
경고가 차단됩니다. – mplungjan
setTimeout
2 초 동안 코드의 실행을 차단하지 않습니다. 사실 setTimeout
이 즉시 반환되고 루프가 계속됩니다. 따라서 5 개의 비동기 호출이 모두 시간 초과 후 거의 동시에 트리거되었습니다.
function print(i) { if (i >= 5) return; console.log(i); setTimeout(function() { print(i + 1); }, 2000); } print(0);
setTimeout(fn,delay)
은 MS의 지연 delay
후 주어진 함수 fn
실행이 재귀와 같은 버전 싶습니다, 당신이 원하는 접근합니다. 그래서 당신은 단순히 2000을 사용하여 i
을 곱할 수 :
for(;i<5;i++) {
setTimeout(function(){console.log(z);},2000*i);
}
당신이, 당신이보고하거나 사용하는 클로저를 사용하여, setTimeout
에 사용하는 함수를 반환하는 함수를 만들어야보고하거나 fn
내 i
를 사용하려는 경우 i
.
for(var i=0;i<5;i++)
{
var f = function(x){
return function(){console.log(z+'#'+x);}
}(i);
setTimeout(f,2000*i);
}
그러나 2000 *을 사용하면 각 시간마다 1 초씩 지연이 증가합니다. 같은 간격으로 숫자를 인쇄하려면 어떻게해야합니까? 시각? –
아니요, 매번 2 초 (2000ms) 씩 증가합니다. 조정 된 jsfiddle를보십시오. – KooiInc
증가 지연 : 다음
i
에서setTimeout
후속 사용을 위해f
기능 개체를 만드는 즉시 호출 익명 함수에 의해 사용되는 변수x
를 사용하여 동봉? '2000 * i' – elclanrs타이머가 모두 동시에 * 작동 * - setTimeout *이 즉시 반환 됨 * (비 블로킹)이므로 모든 setTimeouts가 동시에 * 만들어져 모두로 설정됨을 기억하십시오 화재가 발생했을 때부터 같은 간격 (2000ms)으로 발사하십시오. – user2246674
괜찮 으면 2000 * i.It 작동합니다.하지만 2000 + i를 넣으면 한 번에 표시됩니다. 왜 그렇습니까? –