将函数作为参数传递并不起作用

时间:2014-10-12 09:08:03

标签: javascript

我正在制作一个纸牌游戏,你试图获得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()返回的变量askCap()然后调用askCard()。这就是问题出现的地方,当我这样写它时,它会在提示消息中显示整个功能代码,而不是函数返回的内容。但是当我添加这样的参数时:askCard(askPlayer());它再次调用askPlayer。我做错了什么?之前一直在使用这种方式,它已经有效,所以我很困惑为什么它现在不工作。

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

1 个答案:

答案 0 :(得分:2)

您需要调用该函数,而不仅仅是参考它:

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的返回值:

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>

相关问题