2017-09-04 12 views
0

JavaScriptで最低1つの引数を取る関数 "a"を作ろうとしています。未知の引数をポップし、残りの未知の引数で別の関数を呼び出す方法

この関数は第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

あなたは( '.apply()'関数を知っている、および/または[ '...'構文を広める]ください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、Spread構文を読んだ後、Array.prototype.slice.call() – hailong

関連する問題