Der Martin: Zufällige Funktion ausführen

Beitrag lesen

Hallo,

Das mit der Übersichtlichkeit macht jedoch tatsächlich Sinn...=)

ja, find' ich auch. Wenn man genügend tief in der Materie steckt, kommt einem die kompakte Lösung zwar auch irgendwann übersichtlich vor, aber sie ist nicht unbedingt für Einsteiger geeignet.

functionsrand; // Die funktion an der stele der Zufallszahl aus dem Array holen und ausführen (dazu sind die letzten Klammern da)
müsste die funktion nicht function [rand] (); heissen?

Nein. Wenn du diesen Ansatz schon anschauen willst, lass ihn uns Schritt für Schritt aufdröseln.
Das Gesamt-Konstrukt sah so aus (siehe Posting von Jeena):

function a() { alert("a") } // Zwei (oder mehrere) Funktionen erstellen

function b() { alert("b") }

var functions = [a, b]; // Die Pointer darauf in ein Array reinpacken

var rand = Math.floor (Math.rand() * functions.length); // Eine Zufallszahl zwischen 0 und der Anzahl der Funktionen und diese abrunden

functionsrand; // Die funktion an der stele der Zufallszahl aus dem Array holen und ausführen (dazu sind die letzten Klammern da)

  
Zunächst definiert er seine einzelnen Funktionen, hier mit den exemplarischen Namen a und b. Im zweiten Schritt legt er ein Array an, das die Namen (genauer: die Referenzen) dieser beiden Funktionen enthält, und nennt das Array functions. Beachte das 's' am Ende, das nicht nur den Plural anzeigt, sondern auch dafür sorgt, dass der Name nicht mit dem Schlüsselwort "function" verwechselt werden kann. Es ist nichts weiter als ein frei gewählter Name, er hätte auch "murmeltiere" heißen können.  
Dann generiert Jeena eine Zufallszahl, und bemisst ihren Wertebereich nach der Anzahl der Elemente im Array functions.  
  
Und schließlich ruft er eine der Funktionen auf:  
  functions[rand]();  
  
Diese Anweisung heißt:  
 \* Schau ins Array "functions"  
 \* Hole das Element heraus, das durch "rand" indiziert wird (daher die eckigen Klammern)  
 \* Nimm an, dass dieses Arrayelement eine Funktion ist, und ruf sie auf (daher die runden Klammern am Ende)  
  
Jetzt klarer geworden?  
  
So long,  
 Martin  

-- 
Ich denke, also bin ich hier falsch.  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(