Javascript函数求值

Javascript函数求值,javascript,Javascript,我的职能声明如下: function test(id, name) { return id + "*-----*" + name } 所以,当我做这个测试(2,“Bob”)时,我得到: "2*-----*Bob" "2,Bob*-----*undefined" 但当我声明数组时,例如: a = [2, "Bob"] 并将这些参数注入函数,如下所示: test(a.join(',')) 我明白了: "2*-----*Bob" "2,Bob*-----*undefined" 这不

我的职能声明如下:

function test(id, name) { 
  return id + "*-----*" + name
}
所以,当我做这个
测试(2,“Bob”)
时,我得到:

"2*-----*Bob"
"2,Bob*-----*undefined"
但当我声明数组时,例如:

a = [2, "Bob"]
并将这些参数注入函数,如下所示:

test(a.join(','))
我明白了:

"2*-----*Bob"
"2,Bob*-----*undefined"
这不是我想要的。为什么会有这样的解释?如何从我拥有的数组中输出
“2*-*Bob”
。join(',')给你一个字符串,所以你用一个字符串(
“2,Bob”
)调用函数
test
,第二个参数是
未定义的

如果要允许数组作为参数,可以执行以下操作:

function test(id, name) { 
    if (id.length > 1)
        return id[0] + "*-----*" + id[1]
    else
        return id + "*-----*" + name
}
a.join(“,”)
将连接数组,生成类似于
“2,Bob
”的字符串。必须分别传递这两个变量,如:

test(a[0], a[1]);

我认为您只将一个参数传递给需要两个参数的函数

试一试

这将只向函数传递一个参数,即一个包含逗号的字符串<对于
x
的任何值,code>test(x)
始终只向函数传递一个参数

您希望它能够像编写测试(2,“Bob”)
一样工作,但Javascript并没有编写和递归地评估自己!你期望:

  • a.join()
    返回一个字符串并将其写入源代码
  • 读取并执行生成的源代码
  • 它的实际工作方式:

  • 读取并执行源代码
  • a.join()
    返回一个值,该值用作
    test()
    的输入
  • test.apply(null,a)
    将数组
    a
    发送到函数,并使数组元素成为函数参数。也就是说,[0]将是第一个函数参数,[1]将是第二个参数,依此类推,但您的函数只有两个参数


    有关这方面的更多信息,请阅读

    将数组中打包的参数传递给所需的函数
    apply()


    apply
    的第一个参数将在函数内部变为“this”,第二个参数是实际的值数组。

    数组连接将给您一个字符串,而不是两个用逗号分隔的参数,即
    “2,Bob”
    是数组连接的结果,但是
    “2”,“Bob”
    是您想要的。您应该将第二个参数设置为可选,并检查第一个参数是否为数组。然后你可以得到数组内容,而不是两个字符串参数。我想这是因为问题已经编辑过了,但我现在也回答了编辑过的部分。请删除否决票或评论。
    function test(id, name) { 
      return id + "*-----*" + name
    }
    
    var a = [2, "Bob"];
    
    var result = test.apply(null, a); // See below
    
    alert(result);