プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

クロージャを使ってみる<JavaScript勉強中>

javascriptでは無名関数クロージャを定義できます。

 

クロージャの定義の仕方

1.関数の中に関数をつくる

2.外側の関数のスコープ内に変数を定義する

3.内側の関数から2で定義した変数を参照する

4.関数の中で入れ子になった関数内関数を戻り値で返す

 

面倒臭いですね。。

 

試しに使ってみます!!

function outer() {
  var a = 2;
  var inner = function() {
    return a; 
 }
}

var func = outer();
var result = func();
console.log(result); //2

 

クロージャを利用するメリット

なぜこんなに面倒な手順を踏んでまでクロージャを利用するのか当初は意味不明でした。

クロージャを利用することで得られるメリットは二つです。

1.グローバル変数を使わなくて済む

通常の関数では、関数の呼び出しが終わると、その関数のスコープ内で使われていたローカル変数の値は消えてしまい、次の呼び出し時に使うことはできません。

この対処法としてグローバル変数を定義しておき、そこで値を保持することで対処します。

ただし、グローバル変数はどこからでもアクセスできるため意図しない改ざんが起こりえます。

クロージャを利用することでグローバル変数を定義せずにローカル変数の値を保持することが可能となります。

 

2.関数を動的に生成できる。

クロージャは入れ子になった関数を使って定義します。

この時外側の関数は、関数を作り出すための関数と見なせ、外側の関数に渡す引数に応じて、パラメータのことなる様々な関数が生み出せます。