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

또는 다른 해결책은, 단순히 글로벌 선언합니다. 객체와 함께, 당신은 외부 변수를 변경하지 않는 객체 참조가 아닌 primitive 값을 넘겨 때문에

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 statement가 누락되었습니다. 이제 작동합니다! – Swizzx

0

당신은 객체를 걸릴 수 있습니다.

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_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 = scoreFor + 1