javascriptで関数の配列をreduceで回し、reduceの戻り値を関数にして、
その関数の中で処理をしてから戻すといった関数を作ったのですが、処理の流れが思ったと通りではありませんでした。
コードは以下です。
javascript
1const a = () => 'a' 2const b = () => 'b' 3const c = () => 'c' 4const d = () => 'd' 5 6const array = [ a, b, c, d ] 7 8function func(args) { 9 return args.reduce((accum, current, index) => { 10 console.log('=====outer===== index: ' + index + ', accum: ' + accum() + ', current: ' + current()) 11 return (str='*') => { 12 console.log('---inner--- index: ' + index + ', accum: ' + accum() + ', current: ' + current()) 13 return str + accum() + ':' + current() 14 } 15 }) 16} 17 18console.log(func(array)('結果: '))
結果は以下です。
shell
1=====outer===== index: 1, accum: a, current: b 2---inner--- index: 1, accum: a, current: b 3=====outer===== index: 2, accum: *a:b, current: c 4---inner--- index: 1, accum: a, current: b 5---inner--- index: 2, accum: *a:b, current: c 6---inner--- index: 1, accum: a, current: b 7=====outer===== index: 3, accum: **a:b:c, current: d 8---inner--- index: 1, accum: a, current: b 9---inner--- index: 2, accum: *a:b, current: c 10---inner--- index: 1, accum: a, current: b 11---inner--- index: 3, accum: **a:b:c, current: d 12---inner--- index: 1, accum: a, current: b 13---inner--- index: 2, accum: *a:b, current: c 14---inner--- index: 1, accum: a, current: b 15結果: **a:b:c:d
この結果で理解できないのは、
全体的にどのような処理の流れなのかがわかっていないのですが、
特にreduceの戻り値である関数(inner)の処理が何回もされているのと、
func関数の戻り値の関数を呼び出す際に指定した、引数('結果: ')が最後で適用され、それまではundefinedだということです。
こういったコードを説明している日本語のサイトなどがありましたらそちらを載せていただくだけでもありがたいです。
reduxのcomposeの定義を見ている際に理解できないコードがあったので、似ているコードを作って理解しようと思ったらはまってしまいました。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/05 23:50