javascript - 将函数作为参数传递不起作用

标签 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() 返回的变量,然后调用 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>

<小时/>

你说过:

I call both these functions, first askPlayer() then askCard() using the returned variable from askPlayer().

但是你显示了这段代码:

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>

关于javascript - 将函数作为参数传递不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323523/

相关文章:

javascript - 如何以 Angular 显示和隐藏纯 html 和 css 制作的模式?

javascript - 防止 ReactJS 输入元素中的表单订阅

javascript - 使用 Unix 的 sed 将 csv 转换为 javascript 对象

javascript - 使用 jquery 查找并聚焦第一个元素

javascript - 层次结构的Meteor数据库设计

javascript - 如何在PHP中使用foreach只显示一次重复的数据?

javascript - 如何使用 addEventListener 获取用户点击坐标,然后使用 elementFromPoint().click() 重复该点击?

javascript - 通过 React js 从具有属性的项目列表中获取随机项目

javascript - 如何解决 Ramda reduce 函数的错误返回结果 (javascript)

javascript - JavaScript 中的高阶函数