2017-02-06 7 views

ответ

0

Прежде всего, это не печатает 5 раз, но в 5 раз, каждый с интервалом в 1 сек

for(var i=0; i<5 ; i++) { 
 
setTimeout(function() { 
 
console.log(i) ; }, 1000*i); 
 
}

Это происходит потому, что функция тайм-аута обратного вызова все работает хорошо после того, как завершение цикла. Фактически, поскольку таймеры идут, даже если это было setTimeout(.., 0) на каждой итерации, все эти обратные вызовы функций выполнялись бы строго после завершения цикла, поэтому 5 был отражен, так как это будет последнее значение i в цикле. Каждая из функций обработчика таймера будет использовать одну и ту же переменную «i»

Если вы хотите отделить значение каждый раз. Вы можете вызвать отдельную функцию в ней проходя i как значение и, следовательно, каждый из них будет иметь различное значение

function checkTimeout(i) { 
 
     setTimeout(function() { console.log(i); }, 1000*i); 
 
    } 
 
    
 
    for (var i = 1; i <= 5; ++i) { 
 
     checkTimeout(i); 
 
    }