2014-10-04 2 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.substring (0)' вместо просто 'cont1'? – Barmar

+0

Вы не заметили ошибки в консоли Javascript, когда вы отлаживали это? – Barmar

+0

Хмм после удаления искателя подстроки он работает. Я не ожидал, что это сработает так легко. Я изменю его, чтобы лучше упростить код, но у меня не было ошибок в моем коде. Моя проблема заключалась в том, что, согласно другим плакатам (и проверенным ими), мои объявления функций были помещены неправильно. Все равно, спасибо за помощь! – ShowmenTv

ответ

0

Проблема с кодом является то, что вы используете JavaScript функции таким образом, что они определены во время сеанса синтаксиса вместо времени выполнения.

Пример:

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

определяется во время выполнения и может быть размещен в любом месте вашего кода.

НО

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

определяется в процессе синтаксического анализа времени.

Это означает, что вы должны поместить это в верхней части своего кода, иначе функция «депозит» переменной функции будет не определена в точке вызова.

Ниже приведен рабочий пример вашего кода.

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

Спасибо за ответ! Это способ разработки javascript. Если вы определяете переменную, любая переменная, скажем, '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

Есть две проблемы.

Во-первых, вы вызываете функции deposit и withdrawl перед их определением. Если вы используете синтаксис:

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 в своих функциях, что вы делаете в настоящее время.

Смежные вопросы