繁体   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