我创建了一个函数,它接受一个变量作为其参数来递增,而另一个函数则显示它。
但是,它仅将传递的参数递增1。
var p1_score = 0;
function updateScores(playerDisplay, scoreFor){
if (!gameOver) {
scoreFor++;
playerDisplay.textContent = scoreFor;
}if (scoreFor === winningScore){
playerDisplay.classList.add("winner");
gameOver = true;
}
这是我称之为:
p1_button.addEventListener("click", function(){
updateScores(p1_display, p1_score);
});
因此,当单击按钮时,它不会使p1_score增加1以上。
你应该收到它。就像是
function updateScores(playerDisplay, scoreFor){
if (!gameOver) {
scoreFor++;
playerDisplay.textContent = scoreFor;
}if (scoreFor === winningScore){
playerDisplay.classList.add("winner");
gameOver = true;
}
return scoreFor;
}
然后
p1_button.addEventListener("click", function(){
p1_score = updateScores(p1_display, p1_score);
});
或者另一种解决方案是,简单地将其声明为全局。
var scoreFor =0;
function updateScores(playerDisplay, scoreFor){
if (!gameOver) {
scoreFor++;
playerDisplay.textContent = scoreFor;
}if (scoreFor === winningScore){
playerDisplay.classList.add("winner");
gameOver = true;
}
}
p1_button.addEventListener("click", function(){
updateScores(p1_display);
});
p1_score
和scoreFor
是两个不同的变量。当您调用该函数时,第一个将其值传递给函数内的值。由于该值是一个数字(这是一个原始值),因此复制该数字而不是使用引用传递。因此增加scoreFor
不会影响p1_score
。
这在一些其他语言中是可能的,例如C ++,其中有指针和传递引用。
将功能更改为以下内容:
function updateScores(playerDisplay, scoreFor){
// ...
return scoreFor; // return scoreFor after it's been altered
}
然后使用这样的函数:
p1_score = updateScores(p1_display, p1_score);
你必须在函数之外声明得分,我的意思是声明像一个全局变量并用这个替换:scoreFor++;
:scoreFor = scoreFor + 1
您可以获取一个对象,因为对于该对象,您可以移交对象引用而不是primitive值,这不会更改外部变量。
function updateScores(playerDisplay, scoreFor) {
if (!gameOver) {
scoreFor.value++;
playerDisplay.textContent = scoreFor.value;
} else if (scoreFor.value === winningScore) { // assuming an else if
playerDisplay.classList.add("winner");
gameOver = true;
}
}
var p1_score = { value: 0 }; // object with value
p1_button.addEventListener("click", function(){
updateScores(p1_display, p1_score);
});