2017-09-04 15 views
0

我試圖做一個函數「一個」,將採取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

回答

0

試試這個。

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]); 
    } 
} 
0

也許將一個數組傳遞給函數「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 
0
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