如何创建一个接受参数的函数并在调用时递增它?

问题描述 投票:4回答:4

我创建了一个函数,它接受一个变量作为其参数来递增,而另一个函数则显示它。

但是,它仅将传递的参数递增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以上。

javascript function
4个回答
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);
    });

0
投票

p1_scorescoreFor是两个不同的变量。当您调用该函数时,第一个将其值传递给函数内的值。由于该值是一个数字(这是一个原始值),因此复制该数字而不是使用引用传递。因此增加scoreFor不会影响p1_score

这在一些其他语言中是可能的,例如C ++,其中有指针和传递引用。

将功能更改为以下内容:

function updateScores(playerDisplay, scoreFor){
    // ...
    return scoreFor;    // return scoreFor after it's been altered
}

然后使用这样的函数:

p1_score = updateScores(p1_display, p1_score);

0
投票

你必须在函数之外声明得分,我的意思是声明像一个全局变量并用这个替换:scoreFor++;scoreFor = scoreFor + 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);
});
© www.soinside.com 2019 - 2024. All rights reserved.