基本上,玩家选择返回未定义。当我通过console.log('rock')时,尽管在控制台中没有显示'return'值,我仍可以在控制台中看到它
function playerChoice(){
paperButton.addEventListener('click', function (){
return 'paper'
})
rockButton.addEventListener('click', function (){
return 'rock'
})
scissorsButton.addEventListener('click', function (){
return 'scissors'
})
}
答案 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函数早已终止并返回了要返回的内容,所以您对此无能为力。
这意味着您通常会设置某种机制来传播该操作的结果。回调函数很常见,但是您也可以在其中执行任何操作,运行其他代码,填充表单值,这完全取决于您。