Вы просто прочитайте еще раз ваш код. У вас выполняется цикл, который на каждой итерации запускает новый setTimeout! То есть вы за очень короткий промежуток создаете множество setTimeout, которые выстрелят через ~1 сек. разом (на самом деле не единовременно, так как они будут выполняться последовательно + еще с учетом других поступающих событий, но это сути дела не меняет).
Логика должна быть такой:
var toster = function() {
// your code
setTimeout(toster, 1000);
}
toster();
Но я не совсем понимаю, что вы тут хотите сделать вообще... Возможно, вам нужны иные подходы, но касательно setTimeout, в силу его природы, циклы не нужны.
p.s. Стоит почитать про то,
как работают таймеры в JS (и какие бывают вообще).
p.p.s. Ни в коем случае не используйте таймеры для перерисовки canvas. Для этого юзайте
вот это.