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

时间:2017-12-22 18:07:12

标签: javascript function

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

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

4 个答案:

答案 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_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);

答案 3 :(得分:0)

你必须在函数之外声明scoreFor,我的意思是声明为全局变量并将其替换为scoreFor++;scoreFor = scoreFor + 1