Felix Riesterer: Frage zum Wiki-Artikel „requestAnimationFrame“

Beitrag lesen

problematische Seite

Lieber Thomas,

Die Aussage "Sie können keine eigenen Parameter für diese Funktion bereitstellen." ist falsch.

ist sie das? Ich beweise Dir, dass sie nicht falsch ist.

Auf der fraglichen Seite wird davon gesprochen, dass die Methode requestAnimationFrame des window-Objektes ein Funktionsobjekt als Argument benötigt. Dieses ist der einzige Parameter, den diese Methode auswertet, weitere Parameter können zwar an diese Methode übergeben werden, jedoch werden sie nicht ausgewertet werden. Und genau das beweist Du im Grunde auch mit Deinen eigenen beiden Code-Beispielen:

requestAnimationFrame(function () { myFunction(para1, para2); }

oder

requestAnimationFrame(() => { myFunction(para1, para2); }

In beiden Beispielen übergibst Du genau ein Argument an requestAnimationFrame, nämlich ein Funktionsobjekt in Form einer anonymen Funktion. Das entspricht zu 100% der Aussage, von der Du behauptest, sie sei aber falsch. Wenn sie falsch wäre, dann könnte man etwas in dieser Art tun:

requestAnimationFrame(
  (timeStamp, x) => myFunction("noch was", x, timeStamp),
  42,
  "Unsinn"
);

In meinem Beispiel werden drei Argumente an requestAnimationFrame übergeben:

  1. ein Funktionsobjekt (anonyme Pfeilfunktion), welches zwei Parameter entgegen nimmt
  2. die Ganzzahl 42
  3. die Zeichenkette „Unsinn“

Das zweite und dritte Argument wird von der Methode requestAnimationFrame ignoriert werden. Genau das ist der Hintergrund der von Dir als falsch bezeichneten Aussage. Die Methode requestAnimationFrame ist so spezifiziert, dass sie eben nur das Funktionsobjekt nimmt, und keine weiteren Argumente auswertet.

Schauen wir uns einmal die Parameter des übergebenen Funktionsobjektes an. Die Variable timeStamp wird beim ersten Frame den Wert undefined erhalten, bei einem späteren Frame dagegen eine Ganzzahl, welche die Millisekunden abbilden wird, die seit dem Beginn der Animation vergangen sind. Da ein browserinterner Mechanismus unsere Funktion aufrufen wird, wird er steuern, wieviele Argumente er an unsere Funktion übergeben wird, und mit welchen Werten als Inhalt. Das bedeutet, dass der zweite Parameter x niemals etwas anderes als undefined sein wird, weil der Mechanismus hinter requestAnimationFrame so spezifiziert ist, dass er eben nur diesen einen Wert an unsere Funktion übergeben wird.

Vermutlich sitzt Du einem Missverständnis auf: Deine beiden anonymen Funktionen nehmen beide überhaupt gar kein Argument entgegen, denn die runden Klammern sind bei beiden leer! Dass innerhalb Deiner anonymen Funktionen dann eine ganz andere Funktion namens myFunction aufgerufen wird, die dann auch noch zwei Parameter gefüttert bekommt, ist etwas völlig anderes und hat mit requestAnimationFrame selbst nichts mehr zu tun. Es ist in Deinen Beispielen auch ungeklärt, woher die Variablen para1 und para2 stammen, oder welche Werte sie haben sollen, und wie diese Werte da hinein gekommen sein sollen. Aber das ist wie schon gesagt völlig unabhängig davon, wie requestAnimationFrame selbst funktioniert.

Die Aussage im Artikel ist also sachlich korrekt.

Liebe Grüße

Felix Riesterer