基本型纸摇滚剪刀手选秀收益未定

时间:2019-05-17 18:28:39

标签: javascript

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

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

    }) 
}

2 个答案:

答案 0 :(得分:0)

您误解了功能的作用。 addEventListener正是这样做的。它将事件侦听器附加到click事件的那些按钮上,并在事件运行时运行该回调函数。它不运行函数playerChoice()。

function playerChoice(choice) {
    // choice is a string, do whatever you want with it
    // you can return choice here which looks like what you wanted to do originally
}

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



答案 1 :(得分:0)

这是异步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您当时想要做什么是您的工作。您的main函数早已终止并返回了要返回的内容,所以您对此无能为力。

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