簡體   English   中英

將函數作為參數傳遞不起作用

[英]Passing a function as an argument doesn't work

我正在制作一個紙牌游戲,您嘗試將其配對成4對,每局玩家詢問另一位玩家是否具有一定的卡牌價值,如果擁有,則應將所有該值的卡牌交給該玩家問。

在askPlayer()函數中,我提示查看哪個玩家應該收到該問題。 然后我返回任何輸入。

function askPlayer() {
    var askedPlayer = prompt('Which player do you want to ask?');
    return askedPlayer;
}

在askCard()函數中,我將返回的任何askPlayer()都用在askCard()的提示中。

function askCard(player) {
    var whichCard = prompt(player + ', all your:');
    return whichCard;
}

但是,在代碼的更下方的else語句中,我調用了這兩個函數,首先使用askPlayer()返回的變量來進行AskPlayer()然后AskCard()。 這就是問題所在,當我這樣寫時,它會在提示消息中顯示整個功能代碼,而不是函數返回的內容。 但是當我像這樣添加參數時: askCard(askPlayer()); 它再次調用了askPlayer。我在做什么錯? 以前一直使用這種方式,並且一直有效,所以我很困惑為什么現在不起作用。

else {
    askPlayer();
    askCard(askPlayer);
}

您需要調用函數,而不僅僅是引用它:

function askCard(player) {
    var whichCard = prompt(player() + ', all your:');
    // () here ------------------^^
    return whichCard;
}

 function askPlayer() { var askedPlayer = prompt('Which player do you want to ask?'); return askedPlayer; } function askCard(player) { var whichCard = prompt(player() + ', all your:'); return whichCard; } document.getElementById("btn").onclick = function () { askCard(askPlayer); }; 
 <button id="btn">Ask</button> 


您已經說過:

我調用這兩個函數,首先使用askPlayer()返回的變量來進行askPlayer()然后AskCard()。

但隨后您顯示此代碼:

askPlayer();
askCard(askPlayer);

不會這樣做。 該代碼調用askPlayer ,然后丟棄其返回值。 然后,它將調用askCard並傳遞askPlayer函數參考。 如果要使用askPlayer的返回值, askPlayer必須...使用askPlayer的返回值:

var player = askPlayer();
askCard(player);

要么

askCard(askPlayer());

然后使用原始的askCard ,因為您的參數不是一個函數 ,而是一個字符串:

function askCard(player) {
    var whichCard = prompt(player + ', all your:');
    return whichCard;
}

 function askPlayer() { var askedPlayer = prompt('Which player do you want to ask?'); return askedPlayer; } function askCard(player) { var whichCard = prompt(player + ', all your:'); return whichCard; } document.getElementById("btn").onclick = function () { askCard(askPlayer()); }; 
 <button id="btn">Ask</button> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM