我已经编写了下面的函数,作为通过Web界面处理FASTA格式化文件的更大的应用程序的一部分。出于某种原因,它决定在makePretty()内调用我的baseCounts()函数时遇到无穷大。值得注意的是,这两个函数都是由相同的父函数封装的。JavaScript For Loop保持无限循环
函数baseCounts()以100+长数组的形式返回有效数据,console.log证实不应该责怪所以问题必须与makePretty()一起使用。
任何帮助,欢迎。
function baseCount(records){
\t \t // Count instances of Bases in array
\t \t var basecounts = Array();
\t \t for (i=0; i < records.length; i++){
\t \t \t var record = records[i];
\t \t \t console.log(record);
\t \t \t var count = [record.match(/A/g), record.match(/T/g), record.match(/C/g), record.match(/G/g)];
\t \t \t var basecount = Array();
\t \t \t for (i=0; i < count.length; i++){
\t \t \t \t basecount.push(count[i].length); \t \t \t \t
\t \t \t }
\t \t \t // return array of occurance
\t \t \t basecounts.push(basecount);
\t \t }
\t }
\t
\t function makePretty(fasta){
\t \t // Make FASTA more human friendly
\t \t
\t \t var data = Array();
\t \t var basecounts = Array();
\t \t var bases = Array();
\t \t console.log(fasta.length);
\t \t
\t \t // Generate base array
\t \t for (i=1; i < fasta.length; i++){
\t \t \t bases.push(fasta[i][2])
\t \t }
\t \t basecounts = baseCount(bases); // RUNS INTO INFINITY
\t \t
\t \t
\t \t for (i=0; i < fasta.length; i++){
\t \t \t \t
\t \t \t var record = Array();
\t \t \t record.push(i); // Add protein number
\t \t \t record.push(fasta[i][0]); // Add NC_#
\t \t \t record.push(fasta[i][1]); // Add base index
\t \t \t _record = fasta[i][2];
\t \t \t var l_record = _fasta.length; // Protein length
\t \t \t //var basecount = baseCount(_record);
\t \t \t var cg_content;
\t \t \t
\t \t }
\t }
你能否请你证明你是如何造成这个错误的? – shmuli 2014-09-30 20:50:21
你会遇到各种使用相同变量名称的嵌套循环的麻烦(你真的应该用'var'来声明)。在JS中,这些范围是最接近的函数,而不是闭包。内部循环使用不同的字母。 – Antiga 2014-09-30 20:51:50