如何弹出未知参数,然后调用另一个函数与其余的未知参数

问题描述:

我试图做一个函数“一个”,将采取JavaScript中最少1个参数。如何弹出未知参数,然后调用另一个函数与其余的未知参数

该函数将提取出第一个参数,然后用其余参数调用另一个函数“b”。

事情是这样的:

var a = function() { 

    var name = arguments[0]; // get argument1  

    console.log("Running ", name); 

    b(<<argument2, argument3... to rest>>>); 
} 


var b = function() { 
    for (var i=0; i<arguments.length; i++){ 
     console.log(arguments[i]); 
    } 
} 

但是我真的不知道该如何写行:

b(<<argument2, argument3... to rest>>>); 

的“论据”可以转换成阵列,从而可以跳出第一个论点。但是,我真的不确定如何动态调用函数b()和其余参数。

在JS中是否有像b(arguments=myArr);这样的函数调用?

非常感谢!

+1

你知道的'。适用()'函数,和/或['...'传播语法(https://developer.mozilla.org/en/docs/Web/JavaScript/参考/运营/ Spread_operator)? – nnnnnn

+0

^感谢这一点,现在学习它,绝对要走的路 – RyanN

试试这个。

var a = function() { 
    var name = arguments[0]; // get argument1 
    console.log("Running ", name); 
    var argsForB = Array.prototype.slice.call(arguments, 1); // converts arguments to an array and removes the first param 
    b.apply(null, argsForB); // calls b sending all the other params. Note that `this` inside b will be `null`. You can replace it with any other value. 
} 
var b = function() { 
    for (var i=0; i<arguments.length; i++) { 
    console.log(arguments[i]); 
    } 
} 

也许将一个数组传递给函数“a”,按照您的计划检索第一个值,在数组上使用shift(),然后将其余数组传递给函数“b”。

var a = function(arguments) { 
    var name = arguments[0]; // get argument1  
    console.log("Running ", name); 
    arguments.shift(); 
    b(arguments); 
} 

var b = function(arguments) { 
    for (var i=0; i<arguments.length; i++){ 
     console.log(arguments[i]); 
    } 
} 

a([1,2,3,4]); 

结果在控制台日志记录:

Running 1 
2 
3 
4 

with ES6, you can use ... to extract array 

    var a = function() { 

     var name = arguments[0]; // get argument1  

     console.log("Running ", name); 
     var args = Array.prototype.slice.call(arguments); 
     args.shift() 
     b(...args); 
    } 


    var b = function() { 
     for (var i=0; i<arguments.length; i++){ 
      console.log(arguments[i]); 
     } 
    } 
+0

'arguments'支持'.shift()'吗? (如果是这样,为什么不'name = arguments.shift()')? – nnnnnn

+1

如果你要去ES2015 +路线,为什么不'var a = function(name,... args){b(... args); }' –

+0

emmm,看来我忘了在读取扩展语法之后添加Array.prototype.slice.call() – hailong