クロージャが分からず調べていたところ、ソースコード1を見つけました。なぜcounter()を実行する度に値が変化するのか理解できずにいましたが、ソースコード2のように、オブジェクトcreateCounterがインスタンス化されたものと考えると、オブジェクト指向として考えて理解が出来ました。
分からないのが、ソースコード1もソースコード2も正しく動作し、同じ挙動をするように見受けられます。両者にはどのような違いがあるのでしょうか?
普段はオブジェクト指向でプログラミングしており、ソースコード2の方式を使っています。あえてソースコード1を使う必然性は何なのでしょうか?
###ソースコード1 - クロージャ
Javascript
1function createCounter() { 2 var n = 0; 3 return function() { 4 return n++; 5 }; 6} 7 8var counter = createCounter(); 9counter(); // 0が返される 10counter(); // 1が返される
###ソースコード2 - インスタンス化
Javascript
1function createCounter() { 2 var n = 0; 3 return function() { 4 return n++; 5 }; 6} 7 8var counter = new createCounter(); 9counter(); // 0が返される 10counter(); // 1が返される
回答2件
あなたの回答
tips
プレビュー