Jump to content
Korean Random
Traveler

ошибка "Maximum call stack size exceeded" в js

Recommended Posts

Подскажите пожалуйста где в данном коде ошибка?

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();

Share this post


Link to post

Short link
Share on other sites

Это рекурсивный вызов.

Он вызвал переполнение.

И вы не передаете 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 by ShadowHunterRUS
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

,

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 by Traveler

Share this post


Link to post

Short link
Share on other sites

почему происходит рекурсивный вызов?

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); // Ошибка. Данная переменная была объявлена внутри функции, вследствии чего мы не можем использовать её снаружи.

Share this post


Link to post

Short link
Share on other sites

,

 

 

Ошибка. Данная переменная была объявлена внутри функции, вследствии чего мы не можем использовать её снаружи.

Т.е я не могу сделать так:

function sum(a,b){
  var a=3;
  var b=2;
  var c=a+b;
   return c;
}
var namber = function sum(a,b); // насколько я понимаю namber = с из тела функции? 

Share this post


Link to post

Short link
Share on other sites

Т.е я не могу сделать так:

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.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

,

да, только начал....

Вроде читаешь и на примерах все понятно....Как начинаешь придумывать свои примеры, все не так просто оказывается....

Самому тяжко....когда подсказать не кому,вот и обращаюсь....

var namber = function sum(a,b); // Ошибка, переменные a, b не были объявленны, или объявленны вне области видимости
//             ^ это ключевое слово используется для объявления функций. Его не должно быть в данном контексте.

здесь извиняюсь глупая ошибка, возникшая из-за невнимательности....

Ну что ж буду дальше постигать..... ведь ни кто не говорил что будет легко... Спасибо за разъяснения!

Заключение: Если я хочу присвоить результат работы функции некой переменной, то переменную которую обрабатывает функция все равно делать глобальной, внутри лишь манипуляция над ней. Я все верно понял?

Edited by Traveler
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Модный всегда: С++

Но всегда большой, страшный и тяжёлый.

 

 

 

Если я хочу присвоить результат работы функции некой переменной, то переменную которую обрабатывает функция все равно делать глобальной, внутри лишь манипуляция над ней.

Совершенно верно.

Share this post


Link to post

Short link
Share on other sites

Добрый день, снова вынужден обратиться за советом....

Подскажите пожалуйста как реализовать функцию текстовых сообщений такого рода:

Текст сообщений храниться в массиве либо объекте ( что лучше подойдет? Почему?)

И реализацию подвязки ее к возвращаемым данным другой функции..

Например существует функция с уловием ЕСЛИ ... ИНАЧЕ..

Так вот если выполнилось одно условие,то возврат значение + вывод на экран сообщения  из massege функции;

Выполнилось другое соответственно вывод другого текста + значение.

текст, как я говорил выше храниться в массиве либо объекте...

Заранее благодарю за конструктивные советы с комментариями.

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...