我无法在下面的功能区中调用争论。
function makeScales(size,note1,note2,note3,note4,note5,note6,note7,note8){
for(var z=0; z<size; z++){
if(semis=="Sharps"){
notes = notes + " - " + noteSharp["note" + z];
} else {
notes = notes + " - " + noteFlat["note" + z];
}
}
}
我经历了许多调试程序,发现我的错误与noteSharp [“note”+ z]更具体地说是“note”+ z。例如,如果我做console.log(noteSharp [note1])我得到了所需的结果,我将z设置为7,所以我可以看到它的填充正确,但我的结果未定义。任何帮助将不胜感激。
答案 0 :(得分:1)
"note" + z
会为您提供类似"note1"
标识符的字符串。
如果要通过索引访问一段数据,则将其放入数组中,而不是放在名称中带有数字的变量中。
例如:
function makeScales(size, notes) {
//...
notes = notes + " = " + noteSharp[ notes[z] ];
//...
}
makeScales( "some size", [ "foo", "bar", "baz" ] );
或者(我不推荐这种方法,因为它在单个数据结构中混合了不同类型的数据),您可以使用arguments
对象。
notes = notes + " - " + arguments[z];
arguments
表示传递给函数的所有参数。第二个参数(又名note1
)将具有索引1
,依此类推。
答案 1 :(得分:0)
您的问题是noteSharp[note1]
使用变量note1
的值作为查找的键,而noteSharp["note" + z]
导致字符串"note"
后跟价值z
。
要通过字符串引用变量名称,请使用eval
:
noteSharp[eval("note" + z)];
但是,我强烈建议不要使用eval
。 Others执行too,但也许有counterpoint。
将note1
,note2
,...,noteN
作为对象的属性传递。因此,您可以根据需要精确查找其值,只需更深一层。
function makeScales(size, notes) {
var z = 1;
var note1 = notes["note" + z];
}
// Calling makeScales with our notes.
makeScales(10, {
note1: 'c',
note2: 'd',
note3: 'e',
// etc.
});