javascript:调用函数参数时遇到问题

javascript:调用函数参数时遇到问题,javascript,function,arguments,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

我在下面的函数中调用参数时遇到问题

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];
        }
    }
}
函数makeScales(大小、注释1、注释2、注释3、注释4、注释5、注释6、注释7、注释8){
for(var z=0;z
“note”+z
将为您提供一个类似于
“note1”
的字符串,而不是一个标识符

如果您想通过索引访问一段数据,那么将其放入数组中,而不是名称中带有数字的变量中

例如:

function makeScales(size, notes) {
    //...
    notes = notes + " = " + noteSharp[ notes[z] ];
    //...
}

makeScales( "some size", [ "foo", "bar", "baz" ] );
或者(我不推荐这种方法,因为它将不同类型的数据混合在一个数据结构中),您可以使用
参数
对象

notes = notes + " - " + arguments[z];

arguments
表示传递给函数的所有参数。第二个参数(aka
note1
)将具有索引
1
,依此类推。

您的问题在于
noteSharp[note1]
使用变量
note1
的值作为查找键,而
noteSharp[“note”+z]
产生一个字符串
“note”
,后跟
z
的值

要通过字符串引用变量名,请使用
eval

noteSharp[eval(“note”+z)];
但是,我强烈建议不要使用
eval
.do,但可能存在一个问题

请改为这样做,否则会出现Cthulhu。。。 将
note1
note2
,…,
noteN
作为对象的属性传递。因此,您可以根据需要精确查找它们的值,只需更深一层

函数makeScales(大小、注释){
var z=1;
var note1=注释[“注释”+z];
}
//用我们的笔记调用makeScales。
makeScales(10{
注1:‘c’,
注2:‘d’,
注3:‘e’,
//等等。
});

您不能使用字符串连接访问参数。但是,您可以通过索引通过
参数
对象访问参数。因此,请在
1
处启动
z
,并使用
noteSharp[arguments[z]]
noteSharp[note1]
noteSharp['note1']
是不一样的。对于你的函数原型,没有很好的方法来完成你想要做的事情。恐怕你没有给我们任何东西可以继续。你所有的注释变量是什么?它们是什么类型的数据?注释最初定义在哪里?你知道它在全局范围内,并且总是未定义的吗假设这个函数没有在以前的某个地方定义,那么它的结尾是什么?请提供一些详细信息/上下文。非常感谢大家的帮助。我添加了一个带有参数的数组,然后通过数组调用了它们,这就完成了。