将parameter passing给另一个JavaScript函数

我试过以下没有成功:

function a(args){ b(arguments); } function b(args){ // arguments are lost? } a(1,2,3); 

在函数a中,我可以使用参数关键字来访问一个参数数组,在函数b中这些都是丢失的。 有没有办法将parameter passing给另一个JavaScript函数,就像我试图做的一样?

使用.apply()对函数b arguments进行相同的访问,如下所示:

 function a(args){ b.apply(this, arguments); } function b(args){ alert(arguments); //arguments[0] = 1, etc } a(1,2,3);​ 

你可以在这里testing一下 。

传播运营商

扩展运算符允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)的地方扩展expression式。

ECMAScript ES6添加了一个新的运算符,可以让您以更实用的方式执行此操作… Spread运算符

不使用apply方法的示例:

 function a(...args){ b(...args); b(6, ...args, 8) // You can even add more elements } function b(){ console.log(arguments) } a(1, 2, 3) 

其他答案都不提供的解释是,原始参数仍然可用,但不在arguments对象的原始位置。

arguments对象包含提供给函数的每个实际参数的一个元素。 当你打电话a你提供三个参数:数字13 。 所以, arguments包含[1, 2, 3]

 function a(args){ console.log(arguments) // [1, 2, 3] b(arguments); } 

然而,当你调用b时,你恰好传递一个参数: a arguments对象。 所以arguments包含[[1, 2, 3]] (即一个元素,它是a arguments对象,它的属性包含a的原始参数)。

 function b(args){ // arguments are lost? console.log(arguments) // [[1, 2, 3]] } a(1,2,3); 

正如@Nick所演示的,你可以使用apply在调用中提供一个设置arguments对象。

以下达到相同的结果:

 function a(args){ b(arguments[0], arguments[1], arguments[2]); // three arguments } 

但在一般情况下apply是正确的解决scheme。