当我的函数似乎返回正确答案时,为什么console.log()记录未定义?

问题描述 投票:0回答:1

我正在尝试使用JavaScript创建基本的分数跟踪器:

function Player(name) {
    this.name = name;
    this.scores = [];
}

function addPlayer(name) {
    playersList.push(new Player(name));
    return playersList;
}

function addScore(name, score) {
    playersList.forEach(player => {
        if (player.name == name) {
            player.scores.push(score);
        };
    });
}

function getTotal(name) {
    playersList.forEach(player => {
        if (player.name == name) {
            let sum = 0;
            player.scores.forEach(score => sum += score);
            console.log(sum);
        } 
    });
}

var playersList = [];
addPlayer("Player1");
addScore("Player1", 3);
addScore("Player1", 4);
console.log(getTotal("Player1"));

我期望的输出是:

7
7

但是我却得到:

7
undefined

有人可以帮助我为什么我的console.log()不记录该函数返回的数字吗?

javascript console.log
1个回答
0
投票

尝试这个

function getTotal(name) {
  let sum = 0;
  playersList.forEach(player => {
    if (player.name == name) {        
        player.scores.forEach(score => sum += score);
        console.log(sum);
    } 
  });
  return sum
}

0
投票

我认为您对playerList的范围感到困惑。您可以在函数中多次引用它,并在底部的脚本中对其进行定义。这些playerList变量是它们各自功能的局部变量,与您的var playerList = []]没有关系

在您的函数中,您可能应该以playerList作为参数,并从功能中使用它。实际上,如果您以SOLID方式执行此操作,则addScore会忽略playerList,因为玩家的得分仅取决于player。我不知道您在做哪种运动,所以我不会在这个线程上拖拉。

阅读范围,您所遇到的问题将变得更加清楚。

© www.soinside.com 2019 - 2024. All rights reserved.