Javascript 使用';参数';使用接收的';参数';问题

Javascript 使用';参数';使用接收的';参数';问题,javascript,arguments,Javascript,Arguments,下面是一个小代码示例,可以很好地说明我的问题: 我有一个函数a,调用时带有可变数量的参数,我想用这些参数调用b。不幸的是,当我运行上面的代码时,它分别显示3和1,而不是3和3 如何使用a中接收到的所有参数调用b?是一个类似数组的对象,对应于传递给函数的参数,因此当调用b()时,只有一个参数,即数组。 您可以使用,它将参数作为数组接受 function a() { alert("a: " + arguments.length); b.apply(undefined, argumen

下面是一个小代码示例,可以很好地说明我的问题:

我有一个函数
a
,调用时带有可变数量的参数,我想用这些参数调用
b
。不幸的是,当我运行上面的代码时,它分别显示3和1,而不是3和3

如何使用
a
中接收到的所有参数调用
b

是一个类似数组的对象,对应于传递给函数的参数,因此当调用
b()
时,只有一个参数,即数组。
您可以使用,它将参数作为数组接受

function a() {
    alert("a: " + arguments.length);
    b.apply(undefined, arguments);
}

function b() {
    alert("b: " + arguments.length);
}

a(33,445,67);

实际b.apply(null,参数);或者相关的第一个参数将返回所需的结果。@Arbel-当两个函数都在同一父作用域中时,为什么null比this更相关?@adeneo:“当两个函数都在同一父作用域中时,为什么null比this更相关?”作用域和
this
几乎没有任何关系,在JavaScript中
主要由函数的调用方式设置(直到ES6的arrow函数),而不是函数的定义位置。@T.J.Crowder-没错,但在这种情况下,函数都是在同一范围内定义的,并且从该范围调用()因此
将具有正确的值,但是因为它没有被使用,所以它其实并不重要。@adeneo:对。但是再一次,当谈到JavaScript时,我真的不会将“scope”和“
this
”结合在一起,因为它们确实是不相关的,而且事实上它们是不相关的,但人们倾向于认为它们是相关的,这是人们对JS的最大问题之一。你已经用所有参数调用了b,但正如adeneo所说,使用参数对象[33445,67]调用它,这意味着b中的参数对象看起来像[[33445,67]]。
function a() {
    alert("a: " + arguments.length);
    b.apply(undefined, arguments);
}

function b() {
    alert("b: " + arguments.length);
}

a(33,445,67);