7.1Functions / Declarations

名前付き関数式を使用する

関数宣言の代わりに名前付き関数式を使用します。関数宣言は巻き上げ(hoisting)されるため、定義前に参照できてしまい、可読性や保守性を損ないます。

関数宣言 `function foo() {}` は、そのスコープの最上部に巻き上げられます。これにより、ファイルのどこに定義されていても呼び出せてしまいますが、コードの実行順序が直感的でなくなり、混乱を招きます。`const foo = function() {}` という関数式を使うことで、変数のスコープルール(TDZ)が適用され、定義前に呼び出すとエラーになるため、より安全なコードになります。また、関数に名前を付ける (`function longName()`) と、エラーのスタックトレースが分かりやすくなるというメリットもあります。

❌ Bad
// bad
function foo() {
  // ...
}

// bad
const foo = function () {
  // ...
};
✅ Good
// good
// lexical name distinguished from the variable-referenced invocation(s)
const short = function longUniqueMoreDescriptiveLexicalFoo() {
  // ...
};