Tengo un bucle for pequeño, pero se salta la cuenta, ¿qué me estoy perdiendo?
var i = 0; function myLoop() { setTimeout(function() { //code below console.log(Date() + ' and count is ' + i++); //code above if (i < 20) { myLoop(); } }, i++) } myLoop()Su i++ en la instrucción console.log está modificando su variable i .
i++ es igual a i = i + 1 .
Reemplace i++ con i , que se evaluará correctamente ya que el incremento de postfijo devolverá el valor antes de la modificación que sería solo i .
Esto funciona:
var i = 0; function myLoop() { setTimeout(function() { //code below console.log(Date() + ' and count is ' + i); //code above if (i < 20) { myLoop(); } }, i++) } myLoop()i++ es igual a i = i + 1; Pero cuando llame a console.log(i++), lo primero será console.log con el valor antiguo y luego incrementará su valor.
Aumenta el tiempo de espera con cada iteración en un milisegundo. ¿Es eso lo que querías?
https://www.w3schools.com/jsref/met_win_settimeout.asp
setTimeout(función, milisegundos, param1, param2, ...)
var i = 0; function myLoop() { setTimeout(function() { //code below console.log(Date() + ' and count is ' + i++); //code above if (i < 20) { myLoop(); } }, 1) } myLoop()