2012-07-15 3 views
2

이것은 매우 제한된 자바 스크립트 기술을 가지고 있을지 모르는 간단한 질문 일 수 있습니다. 내가하고 싶은 것은 함수에서 변수를 수정 한 다음 함수에서 사용할 새로운 변수 값을 다시 반환하는 것입니다.기존 자바 스크립트 변수 업데이트

예를 들어, 클릭 할 때마다 변수에서 10 포인트가 공제됩니다. 각 클릭으로 점차적 인 카운트 다운처럼. 문제는 변수가 반환 될 때마다 업데이트되지 않는다는 것입니다.

아마 JavaScript에 대한 나의 시작 접근법은 나가서 이것에 대해 많이 알 수없는 것 같습니다. 코드는 다음과 같습니다

<html> 
<head> 
<script type="text/javascript"> 

/*starting bank account*/ 
var bank = "200"; 
/* i want this function to deduct ten from the starting bank account and update the bank variable */ 
function Bank(bank) { 
    var printout = document.getElementById("display_bank_result_here"); 
    bank = bank - 10; 
    printout.innerHTML = bank; 
    return bank; 
} 


</script> 
</head> 
<body> 
<button onclick="Bank(bank)">remove 10 from bank</button> 
<p id='display_bank_result_here'></p> 
</body> 
</html> 

선행 덕분입니다. 나는 언젠가 내가 나의 posistion에서 다른 누군가에게 호의를 되돌릴 충분한 기술을 가지기를 바란다.

로버트

+0

첫 번째 문제는 bank를 문자열 변수로 설정한다는 것입니다.이 변수는'var bank = 200;', ** edit **이어야합니다. 다른 사람들이 이미 대답 했으므로, 당신은 그것을 통과 할 필요가 없습니다 기능 매개 변수는 이미 "전역 범위"를 가지고 있으므로 – freefaller

+0

도움을 주셔서 감사합니다. –

+0

당신은 환영합니다,하지만 응답을 제출하여 도움을 주신 분들께 [평판] (http://stackoverflow.com/faq#reputation)을 주십시요. 도움을 주신 덕분에 – freefaller

답변

0

그것은 함수에서 매개 변수 은행을 전달하는 unneccesary입니다. 그냥 다음과 같이하십시오 :

function Bank() { 
    var printout = document.getElementById("display_bank_result_here"); 
    bank = bank - 10; 
    printout.innerHTML = bank; 
} 

로컬 변수 (매개 변수) 은행의 이름을 지정하면 전역 변수 은행이 숨겨집니다. 명령문 bank = bank - 10; 전역 변수가 아닌 지역 변수에만 적용됩니다.

+0

, 나는 지금 gunna 테스트를하고 있습니다. –

1

이것은 범위 때문에 발생합니다. 범위는 변수와 메서드가 정의되고 위치되는 곳을 정의합니다.

함수 안의 모든 것은 해당 함수의 범위 안에 있습니다. 귀하의 기능 Bank도 동일한 변수 은행을 정의합니다. 이것은 함수의 스크립트 상단에 정의한 변수 뱅크를 덮어 씁니다.

두 가지 옵션이 있습니다. 기능의 은행 변수를 완전하게 제거하거나 이름을 변경할 수 있습니다. 당신이 사용하고있는 것을 위해, 저는 그것을 그냥 제거 할 것입니다.

변화의이

function Bank() 
{ 
    var printout=document.getElementById("display_bank_result_here"); 
    bank=bank-10; 
    printout.innerHTML =bank; 
    // You don't need to return it as it is changed inside the function 
} 
+0

도와 주셔서 감사합니다. 정말 고마워요. –

1

Bank 기능을 사용하면 shadowed 변수 bank 때문이다.

Bank 변수에서 bank 변수는 전역 변수가 아니라 로컬 변수를 참조합니다.

: 물론

<button onclick="bank = Bank(bank)">remove 10 from bank</button> 

당신은 또한 예를 들어,이 그림자를 피하기 해결할 수 : 당신이 당신의 전역 변수를 업데이트하는 함수의 return 값을 사용할 때 그 즉시, 문제가되지 않습니다

function Bank() { 
    var printout=document.getElementById("display_bank_result_here"); 
    bank -= 10; 

    printout.innerHTML =bank; 
} 

그러면 return은 필요하지 않습니다.

<button onclick="decreaseBank()">remove 10 from bank</button> 
<p id='display_bank_result_here'>200</p> 

을 그리고 당신의 JS 뭔가처럼 될 것입니다 :

또한, 당신은 모두의 printout에서 시작 값을 넣어 전역 변수를 피할 수

function decreaseBank() { 
    var printout = document.getElementById("display_bank_result_here"); 

    // with subtraction the value of `innerHTML` will be converted in Number 
    // automatically. 
    var bank = printout.innerHTML - 10; 

    printout.innerHTML = bank; 
} 

그것이 도움이되기를 바랍니다.

+0

안녕하세요.이 일을하는 두 번째 방법이 정말 마음에 듭니다. 조언을 해 주셔서 감사합니다. –