2017-10-29 87 views
0

我使用p5.js創建了以下函數,並且mousePressed方法在頁面加載時立即觸發。它不會等待我點擊按鈕對象來顯示包含ans變量的段落。mousePressed方法在p5js中提前啓動

我在做什麼錯?

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

回答

1

讓我們來看看這條線仔細一看:

checkMe.mousePressed(createP(ans)); 

這可以被分成兩行:

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

換句話說,你打電話createP()函數,然後傳遞返回的值(可能是undefined)轉換爲mousePressed()函數。我很驚訝這不會導致JavaScript控制檯中的錯誤。

相反,您要做的是將函數作爲值傳遞給mousePressed()函數。既然你需要使用一個參數,你可以做到這一點是這樣的:

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

注意callCreateP沒有括號()它的名字後,當我們把它傳遞到mousePressed()功能。這是因爲我們將它用作值而不是直接調用它。

你可以縮短,爲這條線:

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

你是男人,凱文。它像一個魅力。額外的解釋也很棒。我一直在與回調的概念鬥爭。但你真的更清楚了。謝謝!! – GMath314