Traveler Posted August 20, 2015 Share Posted August 20, 2015 Подскажите пожалуйста где в данном коде ошибка? function isNumeric(cash) { if (cash >= 0) return !isNaN(parseFloat(cash)) && isFinite(cash); var cash = prompt('Введите количество остатка?'); if (isNumeric()){alert ('На остатке' + ':' + ' ' + cash);} else {alert (cash + ':' + ' ' + 'невозможно');}}isNumeric(); При выполнении функции возникает ошибка "Maximum call stack size exceeded" в 9 строке.... задача функции проверить вводимое число и затем присвоить его в переменную примерно так: var operand = {}; operand.name = name(); operand['available balance'] = isNumeric(); @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 20, 2015 Share Posted August 20, 2015 (edited) Это рекурсивный вызов. Он вызвал переполнение. И вы не передаете isNumeric параметры. После проверки на >=0 можно и не использовать проверку на NaN function isNumeric(cash) { if (cash >= 0 && isFinite(cash)) { return true; } return false; } var cash = parseFloat(prompt('Введите количество остатка?')); if (isNumeric(cash)) { alert('На остатке: ' + cash); } else { alert(cash + ': невозможно'); } Edited August 20, 2015 by ShadowHunterRUS 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Traveler Posted August 22, 2015 Author Share Posted August 22, 2015 (edited) , 1:И все же, почему происходит рекурсивный вызов? 2: Почему при объявлении cash внутри функции например вот так: function isNumeric(cash){ var cash = parseFloat(prompt('Введите количество остатка?')); if((cash >= 0) && isFinite(cash)) { return cash + alert('На остатке: ' + cash); } return false + alert(cash + ': невозможно'); } alert(isNumeric(cash)); происходит ошибка:"Uncaught ReferenceError: cash is not defined (anonymous function) @ функция.html:11", ? буду очень благодарен если кто поможет разобраться.... Если же объявить cash глобально, то alert(isNumeric(cash)) дает NaN. Edited August 22, 2015 by Traveler @ Quote Link to comment Short link Share on other sites More sharing options...
Azbuka Posted August 22, 2015 Share Posted August 22, 2015 почему происходит рекурсивный вызов? function isNumeric(cash) { if (cash >= 0) return !isNaN(parseFloat(cash)) && isFinite(cash); var cash = prompt('Введите количество остатка?'); if (isNumeric()){ // Вот тут происходит вызов функции из самой себя alert ('На остатке' + ':' + ' ' + cash); } else { alert (cash + ':' + ' ' + 'невозможно'); } } isNumeric(); происходит ошибка:"Uncaught ReferenceError: cash is not defined (anonymous function) Всё из-за областей видимости: var globalVariable = "Я - глобальная переменная"; function someFunc() { var localVariable = "Я - локальная переменная"; console.log(globalVariable); // Ok console.log(localVariable); // Ok } console.log(globalVariable); // Ok console.log(localVariable); // Ошибка. Данная переменная была объявлена внутри функции, вследствии чего мы не можем использовать её снаружи. @ Quote Link to comment Short link Share on other sites More sharing options...
Traveler Posted August 22, 2015 Author Share Posted August 22, 2015 , Ошибка. Данная переменная была объявлена внутри функции, вследствии чего мы не можем использовать её снаружи. Т.е я не могу сделать так: function sum(a,b){ var a=3; var b=2; var c=a+b; return c; } var namber = function sum(a,b); // насколько я понимаю namber = с из тела функции? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 22, 2015 Share Posted August 22, 2015 Т.е я не могу сделать так: прочитай лучше книжку, там все расписано. @ Quote Link to comment Short link Share on other sites More sharing options...
Azbuka Posted August 22, 2015 Share Posted August 22, 2015 Т.е я не могу сделать так: function sum(a,b){ var a=3; // Здесь вы перезаписываете аргументы функции, вследствии чего результат всегда будет 5 var b=2; var c=a+b; return c; } var namber = function sum(a,b); // Ошибка, переменные a, b не были объявленны, или объявленны вне области видимости // ^ это ключевое слово используется для объявления функций. Его не должно быть в данном контексте. Правильно так: function sum(a,b) { return a+b; } var number = sum(3,2); // number = 5 var a,b = 3,2; number= sum(a,b); // number = 5 Судя по всему, Вы совсем недавно начали изучать данный язык программирования. Если Вы выбрали JavaScript как первый язык, то это плохо, так как первый ЯП обязан быть статически типитизированным. Я бы посоветовал C, Java, Ada, D, модные сейчас Go и Rust. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 22, 2015 Share Posted August 22, 2015 модные сейчас Go и Rust. Модный всегда: С++ @ Quote Link to comment Short link Share on other sites More sharing options...
Traveler Posted August 22, 2015 Author Share Posted August 22, 2015 (edited) , да, только начал.... Вроде читаешь и на примерах все понятно....Как начинаешь придумывать свои примеры, все не так просто оказывается.... Самому тяжко....когда подсказать не кому,вот и обращаюсь.... var namber = function sum(a,b); // Ошибка, переменные a, b не были объявленны, или объявленны вне области видимости // ^ это ключевое слово используется для объявления функций. Его не должно быть в данном контексте. здесь извиняюсь глупая ошибка, возникшая из-за невнимательности.... Ну что ж буду дальше постигать..... ведь ни кто не говорил что будет легко... Спасибо за разъяснения! Заключение: Если я хочу присвоить результат работы функции некой переменной, то переменную которую обрабатывает функция все равно делать глобальной, внутри лишь манипуляция над ней. Я все верно понял? Edited August 22, 2015 by Traveler 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Azbuka Posted August 23, 2015 Share Posted August 23, 2015 Модный всегда: С++ Но всегда большой, страшный и тяжёлый. Если я хочу присвоить результат работы функции некой переменной, то переменную которую обрабатывает функция все равно делать глобальной, внутри лишь манипуляция над ней. Совершенно верно. @ Quote Link to comment Short link Share on other sites More sharing options...
Traveler Posted August 30, 2015 Author Share Posted August 30, 2015 Добрый день, снова вынужден обратиться за советом.... Подскажите пожалуйста как реализовать функцию текстовых сообщений такого рода: Текст сообщений храниться в массиве либо объекте ( что лучше подойдет? Почему?) И реализацию подвязки ее к возвращаемым данным другой функции.. Например существует функция с уловием ЕСЛИ ... ИНАЧЕ.. Так вот если выполнилось одно условие,то возврат значение + вывод на экран сообщения из massege функции; Выполнилось другое соответственно вывод другого текста + значение. текст, как я говорил выше храниться в массиве либо объекте... Заранее благодарю за конструктивные советы с комментариями. @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.