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を省略できる。