JavaScriptの関数定義の方法まとめ

今まではPythonをメインに書いてきて、JavaScriptはそれっぽくすませてきただけなんだけど、
仕事で真正面から触れることになり、逃げるわけにいかなくなった。
関数定義でいろんなやり方がありすぎて混乱してきたので、一度まとめてみる。

function命令

function sum(a, b) {
     return a + b;
}
console.log(sum(3, 5)); // 8

コンパイル時に評価される。そのため、関数定義より前の行でその関数を使ってもエラーにならない。

functionコンストラクタ

var multiply = new Function('a', 'b', 'return a * b;');
console.log(multiply(3, 5)); // 15

Functionと大文字で書くことに注意。
実行時に評価されるので、関数を使う前に関数定義を書かなければいけない。
関数内部でグローバルスコープを参照するため使いにくい。そのためか、あまり使われない。

即時関数

(function(){
    console.log("executed");
}()) // executed

その場で関数が実行される。
この書き方は、ES2015以前で、関数内部でブロックスコープを実現させるためのテクニック。
ES2015以降はletが使えるようになったため、即時関数を使うことは推奨されない。

関数リテラル(無名関数)

var devide = function(a, b) {
    return a / b;
}
console.log(devide(15, 5)); // 3

実行時に評価されるので、関数を使う前に関数定義が必要。
関数の中はローカルスコープとなる。

アロー関数

var devide_arrow = (a, b) => a / b;
console.log(devide_arrow(15, 5));

ES2015からは、関数リテラルをこのように書き直せる。
関数内部の処理が一文だけなら、中括弧とreturnを省略できる。