JavaScript アロー関数とクロージャー

JavaScriptで以下のようなコードに出くわして少し悩んでしまったので、自分なりの理解の仕方をまとめておく。

const a = b => c => b + c;
console.log(a(15)(21)); //36が表示される

まず、aはbという引数を一つ取りc => b + c;という関数(アロー関数)を返す関数であることが分かる。従って以下のように書き直してみる。

function a(b) {
    return function(c) { //クロージャー
        return b + c;
    };
}

const fn = a(15);
console.log(fn(21)); //36が表示される

関数a内から返される関数は引数bを参照しているクロージャーであることが分かる。

コメント