我创建了一个函数,它接受一个变量作为参数来递增,而另一个函数则显示它。
但是,它仅将传递的参数递增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。
答案 0 :(得分:3)
你应该收到它。像
这样的东西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);
});
答案 1 :(得分:0)
您可以获取一个对象,因为使用该对象,您可以移交对象引用而不是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);
});
答案 2 :(得分:0)
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);
答案 3 :(得分:0)
你必须在函数之外声明scoreFor,我的意思是声明为全局变量并将其替换为scoreFor++;
:scoreFor = scoreFor + 1