Siguiendo Odin Project Rock Paper Scissors : intentar usar una entrada de solicitud JS en otra función para averiguar quién ganó un juego.
Me he quitado mucho para hacer que la pregunta/respuesta sea lo más reutilizable posible para otros.
Tengo 2 variables globales establecidas:
let computerSelection; let playerSelection; Tengo una función (playRound) que calcula el resultado de una ronda (quién ganó) que sé que funciona cuando se codifica la player selection (ya que probé la consola registrando la salida con éxito).
Sin embargo, quiero reemplazar la codificación fija de la selección del jugador para usar la entrada de un aviso. Pero cuando hago esto, no está configurando playerSelection correctamente, ya que solo obtengo ' undefined ' cuando registro playRound() en la consola.
Mi mensaje:
function showModal() { selection = window.prompt('Rock, paper or scissors?').toLowerCase(); playerSelection=selection } Sé que esto funciona cuando registro en la consola la selección del playerSelection con un botón diferente como este:
function print() { console.log(playerSelection); } sin embargo, cuando trato de usarlo en mi función playRound() , ¿se muestra undefined ?
function playRound(playerSelection, computerSelection) { computerSelection = computerPlay(); playerSelection = showModal(playerSelection);También he intentado simplemente usar
playerSelection = playerSelectiony también
playerSelection = showModal()como pensé, seguramente la variable global se establece una vez que el modal está completo, pero eso también está devolviendo indefinido.
No entiendo por qué esto no funciona en la función playRound , ya que parece que el modal/prompt está configurando la variable playerSelection (cuando playerSelection después de hacerlo (usando mi función de print() ?)
Tienes un problema con el alcance aquí. Debido a que tiene un parámetro llamado playerSelection que se pasa a la función, está configurando esa variable y no su variable global. Puedes resolver esto así:
let playerSelection; let computerSelection; function playRound() { computerSelection = computerPlay(); playerSelection = showModal(playerSelection); } function showModal() { return window.prompt('Rock, paper or scissors?').toLowerCase(); } playRound();Tenga en cuenta que también debe devolver el resultado de solicitud de showModal, una función sin una declaración de devolución siempre devolverá undefined.