我有一些解析音乐和弦列表的代码,但是一旦进入主循环,我刚刚初始化的数组会立即填充类似于循环运行完毕后所期望的数据,但是错误。如果我从循环体内调用console.log(数组),它将为每次迭代显示相同的消息,即使我从一个空数组开始并逐渐将其推送到它上面。控制台消息如下所示:
数组(3)0:“cMaj”1:“dMin”2:“fMaj”
但是,如果我在循环开始之前调用console.log(数组),它将正确显示它是一个空数组[]并且程序将起作用,但只要我调用console.log(array)每次迭代。这是怎么回事? console.log调用如何影响脚本的执行?
有问题的功能:
Parse: function (text, signature) {
text = text.split(",");
var real;
var chordCount = 0;
var seq = {
chords: new Array(),
durations: new Array(),
total: 0
};
//console.log(seq.chords) --> []
for (var iii = 0; iii < text.length; iii++) {
//console.log(seq.chords) --> 1:"aMaj",2:"cMin"...
if (/^[a-g]/.test(text[iii])) { //test if it's a chord
chordCount++;
real = text[iii].split("-"); //divide chord and duration
seq.chords.push(ChordParser.Transpose(real[0]));
if (real.length === 1) {
seq.durations.push(signature);
}
else {
seq.durations.push(parseInt(real[1]));
}
seq.total += seq.durations[seq.durations.length - 1];
}
else { //it's a command, push it anyway
seq.chords.push(text[iii]);
}
}
if (chordCount > 0) {
return seq;
}
return null;
}
答案 0 :(得分:0)
你运行这段代码的javascript环境是什么? Browser
,Node
或其他什么?我试过here似乎一切都很好。
看起来这段代码不是javascript代码,因为函数定义有语法错误
Uncaught SyntaxError:意外的令牌(
我将其从Parse: function (text, signature)
更改为const Parse = function(text, signature)
。一切看起来都不错。
ChordParser.Transpose
这种依赖,所以我评论了它,这与你的问题无关。