¿Por qué a veces es útil setTimeout (fn, 0)?

Recientemente me he encontrado con un error bastante desagradable, en el que el código estaba cargando un<select> dinámicamente a través de JavaScript. Este @ cargado dinámicamen<select> tenía un valor preseleccionado. En IE6, ya teníamos código para arreglar el @ selecciona<option>, porque a veces la<select> 'sselectedIndexl valor @ no estaría sincronizado con el @ selecciona<option> 'sindex atributo, como a continuación:

field.selectedIndex = element.index;

Sin embargo, este código no estaba funcionando. A pesar de que el campo esselectedIndex se estaba configurando correctamente, el índice incorrecto terminaría siendo seleccionado. Sin embargo, si pegué unalert() en el momento adecuado, se seleccionaría la opción correcta. Pensando que esto podría ser algún tipo de problema de tiempo, probé algo al azar que había visto en el código antes:

var wrapFn = (function() {
    var myField = field;
    var myElement = element;

    return function() {
        myField.selectedIndex = myElement.index;
    }
})();
setTimeout(wrapFn, 0);

¡Y esto funcionó!

Tengo una solución para mi problema, pero estoy incómodo porque no sé exactamente por qué esto soluciona mi problema. ¿Alguien tiene una explicación oficial? ¿Qué problema del navegador estoy evitando llamando a mi función "más tarde" usandosetTimeout()?

Respuestas a la pregunta(17)

Su respuesta a la pregunta