クロージャ(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)