JavaScript:即時関数にアロー関数を使うと動かないことがある

この記事は約2分で読めます。
記事内に広告が含まれています

コーディングのイメージ

こんにちは、さち です。

JavaScript で変数名を汚染しないために使う「即時関数」。

先日、「即時関数」にアロー関数を使ったときに動かないことがあったので、備忘録として記事を書いておきます。

スポンサーリンク

即時関数の書き方は2種類

以前から使われている「即時関数」には、下記のように記述方法が2種類あります。違いは、末尾のカッコの順番です(3, 7行目)。

(function() {
  console.log('OK');	
})();// OK

(function() {
  console.log('OK');	
}());// OK

この2種類の即時関数はどちらも正常に動作します。どちらを使うかは個人の好みによるところです。

「アロー関数」だと動くのは1種類だけ

ES2015(ES6) から、「アロー関数」という function を使わずに無名関数を書ける書式(関数リテラル)ができました。(関数の定義では使えない)

let func = function(a, b) {
  console.log(a + b);
}

//アロー関数で書くとこうなる
let func = (a, b) => {
  console.log(a + b);
}

見た目のとおり、=> が矢(アロー)のように見えるので、アロー関数と言います。fucntion よりも記述量が少ないので、コーディングを省力化できます。

そこで、アロー関数を使って即時関数を書くとこうなります。

(() => {
  console.log('OK');	
})();// OK

(() => {
  console.log('OK');	
}());// エラーで動かない

なんと、後者はエラーになってしまい動きません!

これは割りと有名な話のようで、ググれば大量に出てきます。fucntion の即時関数で後者の記述を使っていた人は確実にハマるポイントなので、当然かもしれませんね。

「this」の中身も変わる

アロー関数は記述の省力化ができますが、単純に代替できるものではありません。

「アロー関数」と fucntion では、関数内の this が何を指すかが異なります。注意しましょう。

このことは、下記の記事でも紹介しています。

【JavaScript】 「this」は「function」と「アロー関数」で中身が違う
こんにちは、さち です。今回は、JavaScript の「関数」の中で使ったときの this について書いていきます。実は this の中身は、「function」と「アロー関数」どちらを使うかで異なるんです。この違いはエラーの原因になりか

コメント

タイトルとURLをコピーしました