2
function f(message)
{

  console.log(message,arguments);

}

f("H", "e", "l", "l", "o");

它显示:H + [“H”,“e”,“l”,“l”,“o”]

问题:

为什么消息只显示H,而不是["H", "e", "l", "l", "o"]

4

5 回答 5

4

您正在向函数传递 5 个参数:

function test(arg1,arg2,arg3){
  console.log(arg1);//=1
  console.log(arg2);//=2
  console.log(arg3);//=3
  console.log(arguments);//[1,2,3,4,5]
}
test(1,2,3,4,5);

arguments 变量是一个特殊变量,包含函数的所有参数。

因为您可以使用 arguments 变量,所以您可以完全省略 arg1,arg2,arg3 部分:

function test(){
  console.log(arguments[0]);//=1
  console.log(arguments[1]);//=2
  console.log(arguments[2]);//=3
  console.log(arguments);//[1,2,3,4,5]
}
test(1,2,3,4,5);

通常人们不会这样做,因为不清楚将什么传递给函数。为了更清楚您的函数应该返回什么以及应该传递给它的变量,您可以使用 JSDoc。许多 IDE 在自动完成/代码辅助时使用它来显示有关该方法的更多信息。

/**
 * Gets user By Id
 * @param {Number} id
 * @returns {User}
 */
var getUserById=function(id){
    return u;
}
于 2013-07-04T03:43:22.683 回答
1

Message 是您传递给函数的第一个参数,在本例中"H"arguments它是一个类似数组的对象,其中包含您传入的所有参数。

一些信息:

于 2013-07-04T03:42:50.763 回答
1

这里发生的事情是你在这里将 5 个参数传递给 f 。由于函数中只有一个参数,因此只有第一个参数分配给message.

但是,如您所知,其他四个仍然在arguments伪数组中。

于 2013-07-04T03:43:10.857 回答
0

您的函数f只有一个参数,并且您正在传递5 个单独的值或参数,并且由于您只有一个参数来接收它,因此只有1st parameter具有“H”值的参数是唯一接受的。

于 2013-07-04T03:42:48.320 回答
0

您的函数f只接受一个参数,即message. 但是在函数调用期间,您传递了 5 个参数,即"H", "e", "l", "l", "o". 如果您希望所有这些都在消息中可用,则可以使用以下任何一种方法通过:

  1. 在单个字符串f("Hello")中。
  2. 连接字符串f("H" + "e" + "l" + "l" + "o")
  3. 或将其作为数组传递f(["H", "e", "l", "l", "o"])

变量是javascript的arguments内部函数处理机制,即每当您将参数传递给函数时,它都会分配给函数在其签名中定义的变量,但这些变量的数组列表也保存在称为参数的函数变量中。

于 2013-07-04T03:46:29.570 回答