2016-05-19 13 views
1

関数を引数として受け取り、返す関数を記述しようとしています。関数funcArgは 'Called me'を返します。 Array.prototype.slice.call(引数)を使用しました。配列を作成するが、その配列の関数dieを呼び出す方法がわからない。何か案は?ありがとう!!関数insight関数/引数を呼び出す

var caller = function() { 
    return "Called "; 
}; 
var adder = function() { 
    return " me"; 
}; 
var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
} 
funcArgs(caller); 
funcArgs(calleradder); 

答えて

1

機能の配列を持っている場合は、forEachでループすることができます。

var caller = function() { 
    return "Called " 
} 

var adder = function() { 
    return " me" 
} 

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
    myArray.forEach(function (fn) { 
    console.log(fn()) 
    }) 
} 

funcArgs(caller, adder); // "Called me" 

あなたが実際の値を返すだけではなく、それらをCONSOLE.LOGしたい場合は、連結文字列(または任意の他)を返すようにreduceを使用することができます

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 

    return myArray.reduce(function (acc, fn) { 
    return acc + fn() 
    }, '') 
} 
+0

ありがとうございます! argsのconcatメソッドをここでどのように使うのか知っていますか? – learningcoding

+0

'concat'で何をしたいですか?希望の結果は何ですか? – azium

+0

返される "呼び出された"と "私"は、別の行にあるのとは対照的に私のように1行にあると仮定しています – learningcoding

2

あなたは使ってこれを行うことができますreduce

var funcArgs = function() { 
    var functions = Array.prototype.slice.call(arguments); 
    return functions.reduce(function(total, f) { 
    return total + f(); 
    }, ''); 
}; 

機能の配列で始める場合の方法です。次に、各機能を1つずつ実行します。その関数を呼び出して、それを前の関数の結果に追加します。これを簡単なコードにすると、次のようになります。

+0

ありがとう!しかし、この(最後の)解決策は、私が持っている引数の数が分かっていればうまくいくでしょう。 – learningcoding

+1

@learningcodingそれは解決策ではありません、彼は最初の方法の詳細を説明しています.. – azium

+1

@learningcoding最後のものは溶液。これは 'funcArgs(caller、adder)'を呼び出すときに起こっていることの説明です。このようなコードを記述するときは、その動作を理解することが重要です。 –

関連する問題