2017-12-22 13 views
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); 
}); 

ボタンがクリックされたときに、それは以上1 p1_score増加しません。

+1

この関数は、受け取った値の**コピー**をインクリメントします。 –

答えて

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

ありがとうSuresh、return文がありませんでした。それは今働きます! – Swizzx

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

p1_scoreおよびscoreForは、2つの異なる変数である。関数を呼び出すと、最初にその値が関数内の値に渡されます。値は数値(プリミティブ値)であるため、参照を使用して渡されるのではなくコピーされます。したがって、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 = scoreFor + 1

関連する問題