ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

Javascript:高階関数

Javascript高階関数についてのまとめメモ。

高階関数とは
関数を引数にしたり、あるいは関数を戻り値とするような関数の事である。引数や戻り値の関数もまた高階関数となり得る。

ということらしい。さっそく実践。

            function func(value , index, ary){
                document.writeln(value + ":" + index + "<br>");
            }
            var data = ['1','2','3','4','5'];
            function loop(array , func){
                for(var val in array){
                    func(val,array[val],array);
                }
            }
            loop(data,func);

実行結果

0:1
1:2
2:3
3:4
4:5

"loop"関数の第二引数に関数を渡して、"loop"関数内では、第二引数を呼び出して処理をしている。ここでは、"func"関数を呼び出して処理させている。loop関数は一定の処理をするが、第二引数にどんな関数を渡すかによって処理結果がことなり、自由度があがるってことらしい。

では、高階関数を呼び出す際の関数を匿名関数にしてしまえば、さらに自由度はあがる。一つ前の例では、"func"関数を呼び出しているが、これを匿名関数に変更してしまう。

            function loop(array , func){
                for(var val in array){
                    func(val,array[val],array);
                }
            }
            var data = ['1','2','3','4','5'];
            loop(data,function (value , index, ary){
                document.writeln(value + ":" + index + ":" + ary + "<br>");
            });

実行結果は同じ。"loop"関数の第二引数に匿名関数を使って処理を書いてしまう。ひとつ前の"func"関数だとその他の関数に使用されて、他の関数の都合で書き換えられて動かなくなってしまうかもしれない。だが、こうすることで高階関数のスコープが小さくなって使いやすくなるらしい。