《Javascript》クロージャについてわかりやすく解説

JavaScript

クロージャを理解するために必要な知識

Callオブジェクト

ローカル変数は関数が実行された際にCallオブジェクトと呼ばれるプログラマからは見えないオブジェクトが生成されます。このオブジェクトには以下の内容が含まれます。

その関数内のローカル変数の値

関数に渡された引数名とその値

引数情報を管理するオブジェクト(arguments オブジェクト)

this

親の Call オブジェクトの場所

参考サイト

JavaScript のスコープチェーンとクロージャを理解する - tacamy--blog
前回で JavaScript のスコープの基本がわかったので、今回はスコープチェーンとクロージャを勉強してみました。 Call オブジェクトとクロージャの理解がかなり大変でした・・。 変数オブジェクト JavaScript で変数の宣言と参照をするということは、変数オブジェクトを読み書きするということです。 変数オブジ...

Callオブジェクトは関数の処理が終了すると削除されます。

スコープチェーン

グローバル変数とローカル変数で名前が重複した場合に、正しい参照先を調べる方法をスコープチェーンと言います。値を調べる手順としてはCallオブジェクトを1つ1つ調べていきます。

筆者
筆者

Callオブジェクトがそれぞれ繋がって一本の鎖に例えられることからチェーンという用語が使われているんだと思います。

クロージャとは何か

ある関数が定義された際の「環境」を保持しているとき、その関数をクロージャと呼びます。具体的に説明すると、ある関数がスコープチェーンによって外側にある変数への参照を保持しているとき、その関数はクロージャといえます。

引用:「JavaScriptのクロージャの仕組み」

JavaScriptのクロージャの仕組み
JavaScript にはクロージャという仕組みがあります。ここでは、JavaScript における基本的な仕組みについて説明します。 クロージャとは ある関数…

大前提としてクロージャはある指定の条件を満たす関数のことを指しています。この条件はコードを見ながら理解しましょう。

クロージャの例

以下のコードがクロージャの例です。関数内の戻り値に無名関数が指定されていますがこれがクロージャです。クロージャ内でnumという変数が使用されていますが無名関数内で定義されたものではないのでスコープチェーンをつかって外側のCallオブジェクトから引数を参照しています。

クロージャをつかうと関数内の変数の値を保持できていることが確認できます。

クロージャのメリット

クロージャのメリットは大きく以下の2点です。

・グローバル変数の数を削減できる
・関数内の変数値を保持できる

筆者
筆者

以上でクロージャの基本的な部分についての解説は終了です。最後まで読んでいただき本当にありがとうございます。

番外:その他おすすめの記事

エンジニアがもっと楽しく仕事できるようにスキルアップの方法や役立つ情報を発信しています。興味がある方はご覧になってください。読者の皆様にとって損になるようなことはないと思います。使ってない方は是非使ってみてください!

おすすめアイテム①

自分はオフィス次の2点の座布団と背もたれクッションを利用してます。姿勢が安定し、お尻への負担が激減します。オフィスにいるのに自宅で作業しているような感覚になるので気に入ってます。また疲労感もかなり減るので費用対効果が非常に高いアイテムだと思ってます!

おすすめアイテム②

ブックスタンドみなさん使ってますか?PCを打ちながら参考書見る時に手で抑える必要がなくなるので非常に便利です。自分も購入した時なんでいままで使ってなかたんだろうと後悔したのでまだ持ってない方は買っておくと作業効率があがりますよ!

エンジニアの基礎知識・教養

別の記事でエンジニアとして知っておくべき技術本についてまとめました。スキルの高いエンジニアは極々当たり前にしっている知識だとおもいますが、そうでない方、エンジニアのスキルに不安があるかたに是非読んで欲しい技術本をまとめました。そのなかで例を1つあげるならば「リーダブルコード」などが挙げられます。優秀なエンジニアの先輩でこの本を読んでいない方はほぼいないと思います。エンジニアのスキルを上げるために、ある程度読むべき本というものが決まっているのできちんと読んで勉強しましょう。

時短アイテム!日々の生活の質を上げる

日常生活における無駄を省く表品をまとめました。1日無駄な作業時間が10分発生するとしたら1年間で3600時間もその無駄な作業に時間を費やすことになります。このような魔の作業を消し去ってくれる商品をまとめました。全て自分が使ってお勧めできる商品のみ紹介してます。

気軽にお声かけください

このような形でほぼ毎日、情報発信を行ってます。技術的な部分で誤っている点などもあるかもしれません。その様な部分を発見した方はTwitterのDMなどで知らせていただければ凄い嬉しいです。また自身自身のエンジニアのネットワークを広げたいと思ってます。日頃六本木や渋谷にいることが多いですので気軽にお誘いください。情報交換しましょう。

タイトルとURLをコピーしました