Función setTimeout de llamada dentro de un bucle

Soy nuevo en javascript y estoy tratando de llamar a una función usando setTimeout desde unpar lazo. El bucle se ejecuta para cada miembro de una lista de nodos.

Estoy descubriendo que la función que estoy llamando con setTimeout solo se está ejecutando durante la última iteración del bucle. En el siguiente ejemplo, me gustaría hacer tres llamadas separadas para setTimeout pero encuentro que las dos primeras llamadas se ignoran.

function moveants(e, stepdistance) {

    . . . . .

    for(var i = 0; i < 3; i++)
    {
        var nextAnt = antgroup.childNodes[i]
        nextAnt.count = 0;
        nextAnt.member = i;
        setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 0);
    }
}

function takeStep(ant, destX, destY, stepDistance) {

    . . . .

    . . . .

    if( condition )
    {
        return;
    }
    else
    {
        takeStep(ant, destX, destY, stepDistance);
    }
}

He vistootras publicaciones que describen hacer múltiples llamadas a setTimeout. Sorprendentemente (para mí), las llamadas múltiples funcionarán si simplemente las saco de lapar bucle como este.

    setTimeout(function () { takeStep(antgroup.childNodes[0], 
         mouseclickX, mouseclickY, 10) }, 10);
    setTimeout(function () { takeStep(antgroup.childNodes[1], 
         mouseclickX, mouseclickY, 10) }, 10);
    setTimeout(function () { takeStep(antgroup.childNodes[2], 
         mouseclickX, mouseclickY, 10) }, 10);

Simplemente no puedo entender por qué hay una diferencia entre llamarlos desde unpar loop y llamándolos fuera de uno.

Obtengo valores de retorno válidos de la llamada setInterval en todos los casos ... es solo eso con solo la última iteración de lapar loop ejecuta la función realmente.

Gracias de antemano por cualquier ayuda

Respuestas a la pregunta(2)

Su respuesta a la pregunta