JavaScript

function文と関数リテラルの違いの簡単メモ

関数定義(function文)

定義してから実行できる。

hoge.js
function hoge(){
  console.log('ほげ')
}

hoge(); 
// "ほげ"

コード順関係なく先に実行させることもできる。

hoge.js
hoge(); 
// "ほげ"

function hoge(){
  console.log('ほげ')
}

関数リテラル(無名関数の代入)

関数を作ってから実行できる。

hoge.js
var hoge = function (){
  console.log('ほげ')
};

hoge(); 
// "ほげ"

先に実行すると怒られる。

hoge.js
hoge(); 
// hoge is not a function

var hoge = function (){
  console.log('ほげ')
};

function文はプログラムの最初に宣言されたものとみなされる。ホイスティング(巻き上げ)というらしい。
関数リテラルは、ホイスティングされず実行コンテキスト中に動的に定義される。
また、function文ではセミコロン(;)は不要で、関数リテラルは式だからセミコロン(;)があるという違いも気をつけよう。