我正在尝试使用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()
不记录该函数返回的数字吗?
尝试这个
function getTotal(name) {
let sum = 0;
playersList.forEach(player => {
if (player.name == name) {
player.scores.forEach(score => sum += score);
console.log(sum);
}
});
return sum
}
我认为您对playerList
的范围感到困惑。您可以在函数中多次引用它,并在底部的脚本中对其进行定义。这些playerList
变量是它们各自功能的局部变量,与您的var playerList = []
]没有关系
在您的函数中,您可能应该以playerList
作为参数,并从功能中使用它。实际上,如果您以SOLID方式执行此操作,则addScore
会忽略playerList
,因为玩家的得分仅取决于player
。我不知道您在做哪种运动,所以我不会在这个线程上拖拉。
阅读范围,您所遇到的问题将变得更加清楚。