Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过DOM重新定义全局变量(forEach addEventListener)_Javascript_Html_Css_Dom_Global Variables - Fatal编程技术网

Javascript 通过DOM重新定义全局变量(forEach addEventListener)

Javascript 通过DOM重新定义全局变量(forEach addEventListener),javascript,html,css,dom,global-variables,Javascript,Html,Css,Dom,Global Variables,我正试图创建一个石头剪刀游戏,但我似乎被其中一个变量的全局/局部声明卡住了。我在使用函数的人身上发现了类似的问题,但我似乎无法将解决方案转换为使用DOM方法 let playerChoice; const playerBtns = document.querySelectorAll("button"); playerBtns.forEach((button) => { button.addEventListener("click", (e) => { let

我正试图创建一个石头剪刀游戏,但我似乎被其中一个变量的全局/局部声明卡住了。我在使用函数的人身上发现了类似的问题,但我似乎无法将解决方案转换为使用DOM方法

let playerChoice;

const playerBtns = document.querySelectorAll("button");
playerBtns.forEach((button) => {
    button.addEventListener("click", (e) => {
        let playerChoice = button.id;
    });
});
我遇到的问题是playerChoice是在本地声明的,而我的另一个函数试图全局地获取这个变量

我有没有办法在全球范围内重新定义playerChoice

对于下面的函数roundWinner(),playerChoice未定义

function compSelection() {
    choices = ["rock", "paper", "scissors"];

    let compChoice = Math.floor(Math.random() * choices.length);
    return choices[compChoice];
} 

function roundWinner() {
    const outcome = {
        rock: {lose: "paper", win: "scissors"},
        paper: {lose: "scissors", win: "rock"},
        scissors: {lose: "rock", win: "paper"}
    }

    if (outcome[playerChoice].win === compChoice()) {
        alert("You win!");
    } else if (outcome[playerChoice].lose === compChoice()) {
        alert("Computer wins!");
    } else {
        alert("Tie!");
    }
}  

谢谢

最简单的方法是重命名任一变量。然而,维护一个全局变量总是一个坏主意。它添加了一个sideeffects只需使用
roundWinner
作为事件处理程序,而不是只更改全局变量的内容。
==compChoice()
应该是
==compSelection()
,如果(…),则只需调用一次,而不是每次调用它。