ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

Javascript:クロージャー

Javascriptのクロージャーに関してのまとめメモ。

クロージャーとは・・・
クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。

難しいことはわからないので、簡単に言うと状態をもっている関数といえばJavaとかやってる人にはわかりやすいかも。

            function sample(num){
                num = 10;
                return function(){
                    return --num;
                }
            }
            var data = sample(10);
            document.writeln(data + "<br>"); // 実行結果:function () { return --num; }   --1
            document.writeln(data()); // 実行結果:9    --2
      document.writeln(data()); // 実行結果:8    --3

実行結果

function () { return --num; }
9
8

"1"で、変数"data"内には匿名関数があることがわかる。"2","3"ではそれを関数として実行して、"3"の結果は8になる。変数"data"内にはローカル変数宣言がないので、"--num"はエラーになるかと思いきやちゃんと実行できている。変数"num"を保持しているらしい。なので、必要なローカル変数と関数を変数が保持していて、それを呼び出す度に実行されている。とても便利。