0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaScriptでクロージャについてふんわりと説明してみる

Posted at

クロージャとは

クロージャは、組み合わされた(囲まれた)関数と、その周囲の状態(レキシカル環境)への参照の組み合わせです。言い換えれば、クロージャは内側の関数から外側の関数スコープへのアクセスを提供します。JavaScript では、関数が作成されるたびにクロージャが作成されます。

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

...ムズカシイ。

実例で見てみる

closureSample.js
'use strict'

function outerFunction(param){
    // ローカルスコープのvalue変数
    let value = param;

    return function innerFunction(){
        // outerFunctionで定義された変数をインクリメントして返す
        return ++ value;
    }
}

const increFunc = outerFunction(5);

// increFuncを呼び出すたびにvalue変数がインクリメントされていく
console.log("1回目", increFunc());
console.log("2回目", increFunc());
console.log("3回目", increFunc());

// value変数を更新しようとしても、宣言されていないというエラーになる
value = 10;

ソースコードを見てみると、value変数に関して

  • innnerFunctionからアクセスできる
  • outerFunctionの外からはアクセスできない

ということがわかります。

ふんわりと説明してみます

引用元の表現を上記のソースコードをもとに
innerFunction = 組み合わされた(囲まれた)関数
outerFunction = その周囲の状態(レキシカル環境)
とすると、 クロージャとは、outerFunction内で宣言したvalue変数を外部からはアクセスできないが、innerFunctionからはアクセスできるようにすることです

なにがいいの

変数へのアクセス権を限定することで、重要な意味を持つ変数を誤って変更してしまうことを防止したり、特定の関数からしか参照されないような変数を余計なスコープで公開して煩雑になることを防止できるといった利点があります。

以上、ふんわりでした。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?