LoginSignup
0
0

More than 1 year has passed since last update.

クロージャの概要と具体例

Posted at

クロージャについて学習した内容まとめ

クロージャ(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を定義した。この関数を使うことで様々な和暦に対応した西暦変換関数を作り出すことができるため、汎用性が高いと言える。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0