@Serjio-Grig
Тот самый никто (=

Из-за чего возникает переполнение стека?

Здравствуйте. Имеется некая функция:
function db_prepare(table, columns){
    var weight = 0;
    var is = Core.dbcfg_tables.indexOf(table);
    if(is){
        weight = 1;
    }
    if(columns != undefined){
        var i;
        for(i in columns){
            i = columns[i].column;
            try{
                if(Core.dbcfg_structures[table].columns.indexOf(i) != undefined){
                    if(weight > 0){
                        weight = 2;
                    }else{
                        weight = 1;
                    }
                }else{
                    if(weight > 0){
                        weight = 1;
                    }else{
                        weight = 0;
                    }
                }
            }catch(Ex){
                if(weight > 0){
                    weight = 1;
                }else{
                    weight = 0;
                }
            }
        }
    }
    if(columns != undefined){
        if(weight < 2){
            return false;
        }else{
            return true;
        }
    }else{
        if(weight < 1){
            return false;
        }else{
            return true;
        }
    }
}


Мне отладчик упорно твердит, что в ней происходит переполнение стека (скорее всего, создается вечный цикл), но никак не возьму в толк -- в чем конкретно здесь проблема. Голова после продуктивной ночи отказывается уже думать.
Заранее спасибо за помощь.
  • Вопрос задан
  • 118 просмотров
Решения вопроса 3
fzfx
@fzfx
18,5 дм
i = columns[i].column;
мне вот эта строка не по нраву, сам не знаю почему. и так на неё смотрел, и эдак - не нравится, хоть ты тресни.
Ответ написан
Еще вы неправильно используете indexOf:

indexOf(i) != undefined

indexOf НИКОГДА не возвращает undefined. Если вы хотите проверить элемент на существование в массиве, то необходимо это делать так:

indexOf(i) >= 0
Ответ написан
@Serjio-Grig Автор вопроса
Тот самый никто (=
Разобрался. Слона и не приметил.
Имеется Core.js, который инициализирует все, что необходим ядру. В нем неверно передавалось название функции для инициализации, из-за чего просто-напросто не создавалась структура таблицы, а поскольку всё лежало в блоке try catch, то он не мог выдать адекватную ошибку. Всем спасибо за ответы и советы.:)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы