我已經編寫了下面的函數,作爲通過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