📘

JavaScript / ファイルのトップレベルでの関数宣言 & アロー関数式

2025/01/11に公開

関数宣言の場合

メリット

  • ホイスティングを利用して柔軟なコードを書ける(関数宣言がスコープ内のどこでも使用可能)
fn();
// > hoge

function fn(){
    console.log("hoge")
};
  • 一目で関数であると理解できる(functionキーワードから始まるため)
    *ソースは見当たらなかったけど、Googleは関数宣言を推奨しているような記事を見かけたことがある

デメリット

  • 再宣言可能
fn();
// > fuga

function fn() {
  console.log("hoge")
};

function fn() {
  console.log("fuga")
};
  • thisの挙動が難しい(動的に変化するため)

アロー関数式の場合

メリット

  • 関数の再宣言を防ぐ
const fn = () => {
  console.log("hoge")
};

const fn = () => {
  console.log("fuga")
};

fn();
// > Uncaught SyntaxError
// アロー関数式に限らず、funtionキーワードを利用した関数式を使えば同じ効果はあるけれど、アロー関数式の方が記述が簡素だし後述のメリットがある
  • thisの挙動がわかりやすい(定義された時点で固定される)
  • 記述が簡素

デメリット?(というか特徴?)

  • プロトタイプを持たない
  • argumentオブジェクトを持たない
  • new演算子でインスタンス化できない

一見デメリットが無いような気も・・・

プロトタイプやargumentオブジェクトなんてモダンJSではほとんど使わないと思うし・・・

でも個人的にはファイルトップレベルでは関数宣言

確かにアロー関数は機能的に優れているけど、変数・定数宣言と関数宣言がストレスなく見分けられるfunctionキーワードでの関数宣言が好み

const greeting = "hello"

function saySomething(something){
    console.log(something)
};
saySomething(greeting);

みんなはどっち?

Discussion