クロージャについて学習した内容まとめ
クロージャ(closure)とは
ある関数内でローカルスコープの情報を記憶している他の関数を内側に含む関数のことである。
クロージャの重要性
グローバルスコープで定義された情報を使用して関数を定義すると、その情報が変更されると関数の処理内容や出力が変わってしまい、予期せぬ関数となってしまう可能性がある。
そのため、ローカルスコープに定義された情報で関数を定義することが重要となる。
クロージャの使用例
以下、実際のソースコードをもとに具体例を紹介する。
実装はJavaScriptで行う。
今回は、西暦から和暦に変換する関数を実装した。
- クロージャなしの実装
script.js
const startHeisei = 1989;
const convertHeisei = function (currentYear) {
return currentYear - startHeisei + 1;
};
convertHeisei(2022); // expected return 34
上記の場合、平成元年の西暦をグローバルスコープとして定義しており、それを参照して平成暦を返す関数を定義している。
- クロージャありの実装
script.js
const convertYear = function (startYear) {
return currentYear => currentYear - startYear + 1;
}
// define functions
const convertHeisei = convertYear(1989);
const convertShowa = convertYear(1926);
const convertTaisho = convertYear(1912);
const convertMeiji = convertYear(1868);
convertHeisei(2022); // expected return 34
convertShowa(2022); // expected return 97
convertTaisho(2022); // expected return 111
convertMeiji(2022); // expected return 155
クロージャありの実装の場合、西暦を引数に取り、その西暦をもとに和暦を返す関数を返す関数convertYearを定義した。この関数を使うことで様々な和暦に対応した西暦変換関数を作り出すことができるため、汎用性が高いと言える。