How to create a function to accept a parameter and increment it when called?

I created a function that takes a variable as its parameter to increase, and another to display.

However, it only increases the passed parameter by 1.

var p1_score = 0;

function updateScores(playerDisplay, scoreFor){
    if (!gameOver) {
        scoreFor++;
        playerDisplay.textContent = scoreFor;
    }if (scoreFor === winningScore){
        playerDisplay.classList.add("winner");
        gameOver = true;
    }

That's when I call it:

p1_button.addEventListener("click", function(){
    updateScores(p1_display, p1_score);
});

So, when the button is pressed, it does not increase p1_score by more than 1.

+4
source share
4 answers

You must get it back. Sort of

function updateScores(playerDisplay, scoreFor){
    if (!gameOver) {
        scoreFor++;
        playerDisplay.textContent = scoreFor;
    }if (scoreFor === winningScore){
        playerDisplay.classList.add("winner");
        gameOver = true;
    }
    return  scoreFor;
}

And then

p1_button.addEventListener("click", function(){
    p1_score = updateScores(p1_display, p1_score);
});

Or another solution, just declare it global.

   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);
    });
+3
source

You can take an object because with the object you are passing a reference to the object, not a primitive value, which does not change the external variable.

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);
});
0
source

p1_score scoreFor - . , . ( ), , . , scoreFor p1_score.

, ++, , pass-by-reference.

:

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

:

p1_score = updateScores(p1_display, p1_score);
0

scoreFor , : scoreFor++; : scoreFor = scoreFor + 1

0

Source: https://habr.com/ru/post/1691242/


All Articles