Frage zum Wiki-Artikel „requestAnimationFrame“
bearbeitet von
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:
~~~ javascript
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 gergangen 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