Вам не хватает параметра в миллисекундах ...
setTimeout(function() { /*something*/ }, 0);
0 устанавливает задержку равной 0, но на самом деле она позволяет вашей функции "переходить в очередь" изсписок выполнения браузера.В браузере есть куча вещей, таких как рендеринг объектов на странице, и при вызове этой функции ваша функция будет запущена, как только браузер выполнит несколько циклов.