1

次のコードを検討してください。

f=(m,c)=>{m?c()&f(--m,c):0}

(この小さなナゲットをくれた zzzzBov に感謝)

これは「for」のないループです

そして以下:

a=b=>b+1

これら 2 つのスニペットと、次の事実を考えると、

z = 0; f(10,a(z));

これは z が 10 になると予想しますが、代わりに JavaScript コンソールに次の値を返します。このコードを変更して、またはループ"TypeError: c is not a function"に頼らずにループが確実に進むようにするにはどうすればよいでしょうか?whilefor

私はこれを教育目的の問題として尋ねています...うまくいけば、何ができるかについての洞察を得ることができます...

4

2 に答える 2

2

関数fは 2 つの引数を取ります: m、反復する回数、およびc、呼び出される関数m。これは、2 番目の引数cが関数であることを意味します。例えば:

f=(m,c)=>{m?c()&f(--m,c):0}


f(15, function() {
 console.log("Hello")
})

これにより、c関数が 15 回反復され、15 回呼び出されconsole.logます。

もちろん、2 番目のビットで目的を達成するには、次のように使用できます。

z=0, f(10,()=>z++)

zこれは、1ずつ増加する通常の矢印関数です。

babelのコードを見てみましょう

私が助けてくれることを願っています!

于 2015-07-21T23:41:37.843 に答える