javascriptの関数宣言まちがいはどれ?

javascriptについて勉強中、functionの書き方いろいろあってややこしいな〜と思います。

javascriptの関数の宣言のしかたには3つのやり方があるのですが、ここでクイズ!

次のうち、間違っている宣言方法はどれ?

  • function ok() return “OK";
  • function ok() {return “OK";}
  • var ok = function() {return “OK";}
  • (function() {return “OK";})();

一つだけ間違っています。

そして、3つの関数宣言とはこちらです。

  • 関数名をつけて宣言する
  • 無名関数として宣言する
  • 即時実行関数として宣言する

それぞれについてまとめておきます。

関数名をつけて宣言する

一番一般的に使われている宣言方法なのではないかと思います。

function ok() {
  return "OK";
}

console.log(ok);
// ƒ ok() {
//   return "OK";
// }

console.log(ok());  // OK

var result = ok();
console.log(result);  // OK

一度定義したものは何度でも呼び出せます。

無名関数として宣言する

まあまあ使われているやつです。フレームワークによっては結構使いますね。

var ok = function() {
  return "OK";
}

console.log(ok);
// ƒ () {
//   return "OK";
// }

console.log(ok());  // OK

var result = ok();
console.log(result);  // OK

こちらは変数に直接オブジェクトとして関数を入れています。変数の有効範囲では何度でも使用できます。

即時実行関数として宣言する

使う場面は限られますが、知っているとちょっとしたときに役立つ書き方です。

var result = (function() {return "OK";})();
console.log(result);
// OK
console.log((function() {return "OK";})());
// OK

このように、名前の通り宣言したとき1度だけ実行されます。