Javascript 基本纸石剪刀玩家选择返回未定义

Javascript 基本纸石剪刀玩家选择返回未定义,javascript,Javascript,基本上,玩家选择返回未定义。当我通过console.log('rock')时,我可以在控制台中看到它,尽管控制台中没有显示“return”值 function playerChoice(){ paperButton.addEventListener('click', function (){ return 'paper' }) rockButton.addEventListener('click', function (){ return

基本上,玩家选择返回未定义。当我通过console.log('rock')时,我可以在控制台中看到它,尽管控制台中没有显示“return”值

function playerChoice(){
    paperButton.addEventListener('click', function (){
        return 'paper'
    }) 
    rockButton.addEventListener('click', function (){
        return 'rock'
    }) 
    scissorsButton.addEventListener('click', function (){
        return 'scissors'

    }) 
}

你误解了你的职能。addEventListener正是这样做的。它将事件侦听器附加到单击事件的按钮上,并在事件运行时运行回调函数。它不运行函数playerChoice()


这是异步JavaScript代码,因此不能以这种方式编写。相反,您必须提供某种机制,以便在结果确实发生时转发结果。这可以通过回调函数轻松完成:

function playerChoice(cb) {
    paperButton.addEventListener('click', function (){
        cb('paper');
    }) 
    rockButton.addEventListener('click', function (){
        cb('rock');
    }) 
    scissorsButton.addEventListener('click', function (){
        cb('scissors');
    })
}
你可以这样称呼它:

playerChoice(function(choice) {
  console.log("You picked " + choice);
});
请记住,
function()
您提供给
click
处理程序的将在遥远的、不可预见的未来运行。此外,您不能从回调函数返回任何有意义的内容,该值将被忽略

换句话说,计算机不会坐在那里等着你点击一个按钮,这样它就可以返回那个值。相反,它设置了一个事件侦听器,当该操作发生时,该侦听器将参与。你的工作就是告诉JavaScript你在那个时候想做什么。您的主函数早已终止并返回它将返回的任何内容,因此您无法控制它


这意味着您通常会设置某种机制来传播该操作的结果。回调函数很常见,但您也可以在那里做任何您想做的事情,运行其他代码,填充表单值,这完全取决于您。

您的代码没有任何意义。在这里,你到底想用这个函数实现什么?是时候学习异步编程了。return语句所做的就是将该字符串返回给事件处理程序。它与playerChoice功能无关。基本上,我需要在点击按钮后使用价值纸、石头或剪刀,然后将其传递给另一个功能。是的,您需要重新考虑您的逻辑。您应该只调用一个方法,其中包含所选内容
userpicket(“rock”)
另一个选择是使用承诺,但对于初学者来说似乎有些过头了。
playerChoice(function(choice) {
  console.log("You picked " + choice);
});