javascript
1function createCounter() { 2 let count = 0; 3 // `increment`関数は`count`変数を参照 4 function increment() { 5 count = count + 1; 6 return count; 7 } 8 return increment; 9} 10// `myCounter`は`createCounter`が返した関数を参照 11const myCounter = createCounter(); 12console.log(myCounter()); // => 1 13console.log(myCounter()); // => 2 14// 新しく`newCounter`を定義する 15const newCounter = createCounter(); 16console.log(newCounter()); // => 1 17console.log(newCounter()); // => 2 18// `myCounter`と`newCounter`は別々の状態持っている
よくあるjavascriptのクロージャのサンプルを見ていてふと頭に浮かんだことで、調べ方がわからないので質問させていただきます。
上記サンプル実行で
1
2
1
2
と表示されるんですが、これをグローバルスコープで実行した変数名も表示したい場合、つまり上記サンプルだと、
myCounter--1
myCounter--2
newCounter--1
newCounter--2
のように表示したい場合、どんなコードを書いたらよいでしょうか。
補足願います。
たとえば、myCounterを別の変数に代入した場合、
const myCounter = createCounter();
const myCounterReferance = myCounter;
console.log(myCounter()); // => myCounter--1
console.log(myCounterReferance()); // => myCounterReference--2
console.log(myCounterReferance()); // => myCounterReference--3
console.log(myCounter()); // => myCounter--4
こうなることを期待していますか?
追記・修正依頼をいただきましてありがとうございます。
質問投稿時は提示頂いたような、また別の変数に代入するコードは頭にありませんでしたが、
まあ学習としてやっているので、提示して頂いたケースについても考えてみたいと思います。
「実行した変数名」とは具体的には一体何を指すのか、ということをお聞きしたかったのですが、jun68yktさんのご回答で解決しそうなら、それでいいかと思います。
質問文中の「実行した変数名」はmyCounterやnew Counterのことでした。と言ってもconstで宣言しているので定数ですね。失礼しました。
回答1件
あなたの回答
tips
プレビュー