Alle setTimeouts in der Javascript for-Schleife werden sofort ausgeführt

Diese Funktion sollte mit zunehmender Verzögerung vom oberen Rand der Seite bis zu 215 Pixel nach unten scrollen, damit das erste window.scrollTo -Ereignis bei 10 ms, das nächste bei 20 ms usw. stattfindet.
Die letzte Zeile sollte um 2150 ms verzögert sein, es dauert also insgesamt ca. 2 Sekunden.
Stattdessen werden sofort 215 Pixel auf einmal gescrollt.

function scrollDown() {
  var yFinal=216, delay=0;
  for (y=0; y<yFinal; y++) {
    delay = delay+10
    setTimeout(function() {
      window.scrollTo(100,y);
    },delay);
  }
}

Trauriges Gesicht. Warum?

[edit: danke für die hilfe! Ich habe es benutzt, um diese endgültige Lösung zu schreiben, die etwas komplizierter ist, und ich biete sie hier an, damit jeder sie abzocken kann. es scrollt zuerst schnell, dann langsam. Genau das, was ich wollte. Mit setTimeout insteat von setInterval können Sie die Geschwindigkeitskurve noch besser steuern, sodass Sie sie leicht exponentiell verlangsamen können.]

function showCategory(categoryId)
{
  var yInitial=document.body.scrollTop,
      yFinal=216,
      delay=0;

  if (yInitial<yFinal)
  {
    yInitial=(yFinal-yInitial)/1.3+yInitial;
    window.scrollTo(100, yInitial);

    for (var yCurrent = yInitial; yCurrent < yFinal; yCurrent+=2)
    {
      delay += 30;
      (function(position)
      {
        setTimeout(function()
        {
          window.scrollTo(100, position);
        }, delay);
      })(yCurrent);
    }
  }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage