最終更新:2022-09-22 (木) 13:23:02 (584d)  

JavaScript/クロージャ
Top / JavaScript / クロージャ

Closures

関数とその関数が作られた環境という2つのものが一体となった特殊なオブジェクト

https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures

  • function hoge(x){
      ... //このときの変数(引数含め)が記憶される
    
      return function(){
         return ...//なんか処理 
      }
    }
    var foo = hoge(x);

概要

  • クロージャは、独立した (自由な) 変数を参照する関数です。言い換えるとクロージャ内で定義された関数は、自身が作成された環境を '覚えています'。
  • クロージャは関数とその関数が作られた環境という 2 つのものの組み合わせです。
  • JavaScript では、関数が作成されるたびにクロージャが作成されます。

メモ

  • 関数の外側で定義された変数を持つ関数の実行時オブジェクト
  • この環境は、クロージャが作られた時点でスコープ内部にあったあらゆる変数によって構成されています。

メモ

  • 静的スコープ: ある変数がどの値を参照するかは静的に決まる
  • メモリ管理の仕組み: 参照されなくなったデータはガベージコレクションにより解放される
  • クロージャとはこの2つの仕組みを利用して、関数内から特定の変数を参照し続けることで関数が状態をもつことができる仕組み
  • https://asciidwango.github.io/js-primer/basic/function-scope/

用途

  • 関数に状態を持たせる手段として
  • 外から参照できない変数を定義する手段として
  • グローバル変数を減らす手段として
  • 高階関数の一部部分として

関連