2016-05-31 11 views
0

JavaScriptで関数のカリングについて学んだだけです。関数をカルト関数の引数として渡すときに、この引数を抽出する方法はありますか?

私は方法のような呼び出しをします:

yoHello('m', 'j') //prints m followed by j in the console 

yoHello('m', 'j')('k') // prints TypeError: yoHello(...) is not a function 

JSコード:

それは次のように渡されたとき、それは 'K' の引数を抽出するように、私はyoHello を変更するにはどうすればよい
function yoHello() { 
    for (var i = 0; i<arguments.length; i++) { 
    if (typeof arguments[i] == "string") { 
     console.log(arguments[i]); 
    } 
    else { //assume function 
     console.log([].slice.call(arguments[i],0)); //TypeError: yoHello(...) is not a function 
    } 
    } 
} 

上記?また、上記のように「k」が渡されたときに「k」を表示する必要がありますか?それは無名関数の引数ですか?それとも、それがyoHelloの別のインスタンスへの引数として表示されるべきですか?

+2

( 'm'、 'j') 'part ...あなたは本当に関数ではなく、同時に関数を返すことができません...いくつかの明確化が必要です。 –

+0

なぜそれをしたいですか?それはちょうど構文的に間違っています。あなたは 'yoHello( 'm'、 'j'、 'k')'を渡すことはできませんか? – choz

答えて

0

カリングは、関数から関数を返すことによって動作します。例えば;

function add(x){ 
    return function(y){ 
     return x + y; 
    } 
} 

次のように使用できます。

add(1)(2) // = 3 

なぜこれを使用しますか?したがって、再利用のためにxを設定して、別の値のyを入力することができます。

add1 = add(1); 
add1(2) // = 3 
add1(9) // = 10 

入れ子になっている変数を印刷したい場合は、そうすることができます。

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

yoHello('m', 'j')('k') // logs: m \n j \n k 
yo = yoHello('m','j') 
yo('k') // logs: m \n j \n k 

または、代わりに、これまでのところだけyoHello `を見て、` yoHello( 'M'、 'J') `と` yoHello( 'M'、 'J')( 'K')を `区別する方法はありません

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

yoHello('m', 'j')('k') // logs: m \n j \n k 
yo = yoHello('m','j') // logs: m \n j 
yo('k') // logs: k 
関連する問題