setTimeout (func, 0) não funcionará como esperado

Se você está tentando iniciar um thread (ou fazer algo de forma assíncrona) em Javascript, setTimeout (func, 0) e setInterval (func, 0) não são realmente o caminho a percorrer, já que a especificação HTML5 define o valor mais baixo permitido como 4ms.

Provavelmente não há muita diferença (visível) entre 0 ms e 4 ms. Mas se você estiver usando para animação, solicite oAnimationFrame – caso contrário, use este pedaço de mágica de David Baron (2010)

// Only add setZeroTimeout to the window object, and hide everything
// else in a closure.
(function() {
var timeouts = [];
var messageName = "zero-timeout-message";

// Like setTimeout, but only takes a function argument. There's
// no time argument (always zero) and no arguments (you have to
// use a closure).
function setZeroTimeout(fn) {
timeouts
.push(fn);
window
.postMessage(messageName, "*");
}

function handleMessage(event) {
if (event.source == window && event.data == messageName) {
event.stopPropagation();
if (timeouts.length > 0) {
var fn = timeouts.shift();
fn
();
}
}
}

window
.addEventListener("message", handleMessage, true);

// Add the one thing we want added to the window object.
window
.setZeroTimeout = setZeroTimeout;
})();