2017-10-29 1 views
0

Ich erstellte die folgende Funktion mit p5.js und die MousePressed-Methode wird sofort ausgelöst, wenn die Seite geladen wird. Es wartet nicht darauf, dass ich auf das Schaltflächenobjekt klicke, um einen Absatz anzuzeigen, der die Variable ans enthält.mousePressed Methode startet vorzeitig in p5js

Was mache ich falsch?

function setup() { 
    var ans = generate(); 
    var checkMe = createButton('Check Answer'); 
    checkMe.mousePressed(createP(ans)); 
} 

Antwort

1

Lassen Sie uns an dieser Linie einen genaueren Blick:

checkMe.mousePressed(createP(ans)); 

Diese in zwei Linien aufgeteilt werden könnten:

var createPValue = createP(ans); 
checkMe.mousePressed(createPValue); 

Mit anderen Worten, die Sie anrufen die createP() Funktion, und dann übergeben Sie den Wert zurückgegeben (das ist wahrscheinlich undefined) in die mousePressed() Funktion. Ich bin überrascht, dass dies keinen Fehler in der JavaScript-Konsole verursacht.

Stattdessen möchten Sie eine Funktion als Wert in die mousePressed()-Funktion übergeben. Da Sie einen Parameter verwenden müssen, können Sie, dass diese Art und Weise tun:

function callCreateP(){ 
    createP(ans); 
} 
checkMe.mousePressed(callCreateP); 

Beachten Sie, dass callCreateP hat keine Klammern () nach seinem Namen, wenn wir sie in die mousePressed() Funktion übergeben. Das liegt daran, dass wir es als Wert verwenden, anstatt es direkt aufzurufen.

Sie könnten, dass auf diese Linie verkürzen:

checkMe.mousePressed(function(){ createP(ans); }); 
+1

Du bist der Mann, Kevin. Es hat wie ein Zauber funktioniert. Die zusätzliche Erklärung ist auch super. Ich habe mich immer mit dem Konzept eines Callbacks herumgeschlagen. Aber du hast es wirklich viel klarer gemacht. Vielen Dank!! – GMath314