【JavaScript】クロージャ(closure)はプライベートな変数や関数を作る

  • このエントリーをはてなブックマークに追加

クロージャ(closure)についての解説の続き。

前回書いた記事
【JavaScript】クロージャ(closure) (attacktube.com)
【JavaScript】クロージャ(closure)とonclickメソッド (attacktube.com)

クロージャ(closure)はプライベートな変数や関数を作ることに利用できる。
プライベートな変数とメソッドを定義したコードを次に示す。



const myspace = {};

//myspace.sampleは即時関数であり定義して即座に実行される。
//クロージャ(closure)はプライベートな変数や関数を作る。
myspace.sample = function() {

    //strはmyspace.sampleの中からだけアクセス可能
    const str = "hello world";
    const that = {};
    const my = {};

    //my.Test関数はmyspace.sampleの中からだけアクセス可能
    my.Test = function() {
        console.log(str);
    };

    //that.Init関数はmyspace.sampleの外からアクセス可能
    that.Init = function(num) {
        console.log(num + "年");
        my.Test();
    };

    return that;

};


myspace.sample().Init(2023);

この「myspace.sample」関数だが、実行するときに「myspace.sample().Init(2023)」とする必要がある。
しかし、「myspace.sample().Init(2023)」は分かりずらい。
次のコードのように修正する。「myspace.sample」は即時関数であり定義して即座に実行される。
このあと、that.Initメソッドを実行するときに「myspace.sample.Init(2023)」として実行することができる。これで多少は分かりやすくなる。




const myspace = {};

//myspace.sampleは即時関数であり定義して即座に実行される。
//クロージャ(closure)はプライベートな変数や関数を作る。
myspace.sample = (function() {

    //strはmyspace.sampleの中からだけアクセス可能
    const str = "hello world";
    const that = {};
    const my = {};

    //my.Test関数はmyspace.sampleの中からだけアクセス可能
    my.Test = function() {
        console.log(str);
    };

    //that.Init関数はmyspace.sampleの外からアクセス可能
    that.Init = function(num) {
        console.log(num + "年");
        my.Test();
    };

    return that;

})();

myspace.sample.Init(2023);

前に書いた記事
【JavaScript】即時関数 (attacktube.com)

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*