Passing arguments forward to another javascript function
我尝试过以下方法但没有成功:
1 2 3 4 5 6 7 8 9 | function a(args){ b(arguments); } function b(args){ // arguments are lost? } a(1,2,3); |
在函数A中,我可以使用arguments关键字访问参数数组,在函数B中,这些参数将丢失。是否有一种方法可以像我尝试的那样将参数传递给另一个javascript函数?
使用
1 2 3 4 5 6 7 | function a(){ b.apply(null, arguments); } function b(){ alert(arguments); //arguments[0] = 1, etc } a(1,2,3);? |
你可以在这里测试一下。
推广算子
The spread operator allows an expression to be expanded in places where multiple arguments (for function calls) or multiple elements (for array literals) are expected.
ECMAScript ES6添加了一个新的运算符,使您能够以更实际的方式执行此操作:…Spread运算符。
不使用
1 2 3 4 5 6 7 8 9 | function a(...args){ b(...args); b(6, ...args, 8) // You can even add more elements } function b(){ console.log(arguments) } a(1, 2, 3) |
note如果您的浏览器仍然使用ES5,则此代码段返回语法错误。
编者按:由于代码段使用
它将显示此结果:
简而言之,如果使用数组,spread运算符可以用于不同的目的,因此它也可以用于函数参数,您可以在正式文档中看到类似的示例:rest参数
其他答案都没有提供的解释是,原始的论点仍然可用,但在
1 2 3 4 | function a(args){ console.log(arguments) // [1, 2, 3] b(arguments); } |
但是,当您调用
1 2 3 4 5 6 | function b(args){ // arguments are lost? console.log(arguments) // [[1, 2, 3]] } a(1,2,3); |
正如@nick演示的那样,您可以使用
以下结果相同:
1 2 3 | function a(args){ b(arguments[0], arguments[1], arguments[2]); // three arguments } |
但在一般情况下,