javascript:麻烦调用函数参数

时间:2014-01-01 22:43:50

标签: javascript function arguments

我无法在下面的功能区中调用争论。

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,所以我可以看到它的填充正确,但我的结果未定义。任何帮助将不胜感激。

2 个答案:

答案 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)];

但是,我强烈建议不要使用evalOthers执行too,但也许有counterpoint

请改为执行此操作,否则可能会出现Cthulhu ......

note1note2,...,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.
});