2014-10-04 7 views
0

이 코드는 기본적으로 사용자에게 무엇을해야하는지 물어 본 다음 2 가지 기능을 사용하여 실제 변수에서 돈을 더하거나 뺍니다. 그러나 변수는 코드에 의해 업데이트되지 않습니다. 이유는 모르겠다.내 "계정 잔액"변수가 코드에 의해 업데이트되지 않았습니다.

actbal = (100); 
confirm("Would you like to view account balance? Place a deposit? Or make a withdrawl? Press OK to continue!"); 

do 
{ 

var v = "VIEW"; 
var d = "DEP"; 
var w = "WITH"; 

var cont1 = prompt('Type: "VIEW" , "DEP" , or "WITH" to do their respective comands'); 

if(v === cont1.substring(0)) 
{ 
    confirm("Your account balance is: " + actbal); 

} 
else if (d === cont1.substring(0)) 
{ 
    var depo = prompt("How much do you want to deposit?"); 
    var cat = parseFloat(depo); 
    if(cat < 0) 
    { 
     alert("You cant Deposit a negative number..."); 
    } 
    else 
    { 

    confirm("Your new account balance is: " + deposit(cat)); 
    //var actbal = actbal + cat; 
    } 

} 
else if (w === cont1.substring(0)) 
{ 
    var With = prompt("How much do you want to withdrawl?"); 
    var dog = parseFloat(With); 
    if(dog < 0) 
    { 
     alert("You cant Deposit a negative number..."); 
    } 
    else 
    { 

    confirm("Your new account balance is: " + withdrawl(dog)); 
    } 

} 
else 
{ 
    alert("You have not entered a command correctly!"); 

} 
} 
while 
(
    confirm("Do you want to continue with your account?") 
); 


var deposit = function(cat) 
{ 
    actbal = +actbal +cat; 
    return +actbal +cat; 




}; 

var withdrawl = function (dog) 
{ 
    actbal = actbal - dog; 
    return actbal - dog; 

}; 
+0

왜 'cont1' 대신'cont1.substring (0)'을 사용합니까? – Barmar

+0

디버깅을 할 때 Javascript 콘솔에서 오류를 발견하지 못하셨습니까? – Barmar

+0

부분 문자열 찾기를 제거한 후에 작동합니다. 나는 그것이 그것을 쉽게하기를 기대하지 않았다. 코드를 더 단순화하기 위해이 코드를 변경 하겠지만 코드에는 오류가 없습니다. 내 문제는 다른 포스터에 따르면 (그리고 그 (것)들에 의해 입증 된) 함수 선언이 잘못 배치 된 것이 었습니다. 어쨌든 도움을 주셔서 감사합니다! – ShowmenTv

답변

0

코드의 문제는 그들이 정의하는 방식으로 자바 스크립트 기능을 사용하는 것입니다 런타임 대신 구문 분석 시간 동안.

예 :

function deposit(amt) { 
    //do stuff here 
} 

런타임 중에 정의되고 코드에 삽입 될 수 있습니다.

BUT

var deposit = function(amt) { 
    //do stuff here 
} 

는 파싱 시간 동안 정의된다.

이것은 코드 상단에 배치해야한다는 것을 의미합니다. 그렇지 않으면 "deposit"변수 함수가 호출 시점에 정의되지 않습니다.

다음은 코드 예제입니다.

actbal = (100); 
confirm("Would you like to view account balance? Place a deposit? Or make a withdrawl? Press OK to continue!"); 

do { 

    var v = "VIEW"; 
    var d = "DEP"; 
    var w = "WITH"; 

    var cont1 = prompt('Type: "VIEW" , "DEP" , or "WITH" to do their respective comands'); 

    if (v === cont1.substring(0)) { 
     confirm("Your account balance is: " + actbal); 

    } else if (d === cont1.substring(0)) { 
     var depo = prompt("How much do you want to deposit?"); 
     var cat = parseFloat(depo); 
     if (cat < 0) { 
      alert("You cant Deposit a negative number..."); 
     } else { 

      confirm("Your new account balance is: " + deposit(cat)); 
      //var actbal = actbal + cat; 
     } 

    } else if (w === cont1.substring(0)) { 
     var With = prompt("How much do you want to withdrawl?"); 
     var dog = parseFloat(With); 
     if (dog < 0) { 
      alert("You cant Deposit a negative number..."); 
     } else { 

      confirm("Your new account balance is: " + withdrawl(dog)); 
     } 

    } else { 
     alert("You have not entered a command correctly!"); 

    } 
} 
while (
confirm("Do you want to continue with your account?")); 


function deposit (cat) { 
    actbal = +actbal + cat; 
    return actbal; // DO NOT DOUBLE ADD 




}; 

function withdrawl (dog) { 
    actbal = actbal - dog; 
    return actbal; // DO NOT DOUBLE SUBTRACT 

}; 
+0

도움이되고 잘 설명 된 문제를 보내 주셔서 감사합니다. 당신은 또한 내 기능 내 내 어리석은 오류를 수정했지만 다른 사용자가 그것을보고 그것에 대해 말해 줬어. 하지만 질문에서 코드에서 코드를 더 높게 지정하면 함수가 맨 아래에 정의된다는 것을 코드에서 어떻게 알 수 있습니까? 왜 var x = function()이라고하는 것보다 변수 사용을 변경하면 코드가 "흔적"을 따라 더 많이 볼 수 있습니다 ...? – ShowmenTv

+0

답장을 보내 주셔서 감사합니다! 그것은 자바 스크립트가 설계된 방법입니다. 변수, 어떤 변수를 정의하면'var a = 'dog';라고 해 봅시다.이 변수에 접근 할 수있을 것입니다 ** ** 정의 된 후에. 변수 함수도 마찬가지입니다. 그러나'function name_of_function()'으로 시작하는 함수는 런타임에 파싱됩니다. ** 이것은 프로그램이 시작되기 전에 ** 모든 함수를 읽고이를 메모리에 저장합니다. 따라서 코드에서 어디서나 액세스 할 수 있습니다. :) –

0

전화를 걸기 전에 함수를 정의해야합니다. 그냥 다시 주문하는 경우에 그들을 당신은 괜찮을거야 : 다음 http://jsfiddle.net/f4109zq9/

var withdrawl = function (dog){...} 
var deposit = function(cat){ ...} 

과 당신의

do 
{ 
    ... 
} 
while(){ .... } 
+0

수정 내용이 맞지만 해당 링크 내부에 배치 한 코드가 제대로 작동하지 않습니다. 하하 나는 어쨌든 작동하도록 내 코드를 가지고 있으므로 도움을 주셔서 감사합니다! – ShowmenTv

0

두 가지 문제점이 있습니다.

먼저 정의하기 전에 depositwithdrawl 함수를 호출해야합니다. 당신이 구문을 사용하는 경우 :

function deposit() { 
    ... 
} 

당신은 어디서나 정의를 넣을 수 있습니다,하지만 당신은 할당을 사용할 때 스크립트 코드 줄에 도달하면, 그것은에만 적용됩니다.

둘째, 함수에서 잔액을 두 번 더하고 빼는 것입니다. 할당에서 actbal 함수를 업데이트하면 return 문에 입금액 또는 출금 금액을 다시 더하거나 뺍니다. 이미 actbal을 업데이트 한 이후, 그대로 당신은 단지 그것을 반환해야합니다 :

var deposit = function (cat) { 
    actbal = +actbal + cat; 
    return actbal; 
}; 

var withdrawl = function (dog) { 
    actbal = actbal - dog; 
    return actbal; 
}; 
+0

그래, 내가 왜 그게 있는지 나는 확신 할 수 없다. 나는 어리석은 수정을 시도했고, 그것을 바꿔주지 않고 유지해야한다, 좋은 잡기. 그리고 참으로 모든 사람들이 내 기능의 오용/잘못된 배치에 대해 말해주었습니다. 감사! – ShowmenTv

0

중 하나는 function withdrawl()를 사용하거나 call 전에 물품. 다른 사람들도 마찬가지입니다. 현재 어떤 일을하고 계시는지 귀하의 기능에 add or subtract twice하지 마십시오.

관련 문제