トップページ > プログラム > 2016年10月16日 > LWTFfjDf

書き込み順位&時間帯一覧

2 位/196 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000000000000000155112



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net

書き込みレス一覧

+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
586 :デフォルトの名無しさん[sage]:2016/10/16(日) 20:58:57.45 ID:LWTFfjDf
JavaScript入門者です。
クロージャで躓いています。

function Counter() {
var n = 0;
return function () {
return ++n;
};
}
var a = Counter();

a(); // 1
a(); // 2
a(); // 3

これでなぜ増えていくのかが分かりません。
a(); を呼ぶ度に、var n = 0; が実行されるはずなので、増えていかないと思うのですが…
なぜ var n = 0; は実行されないのですか?
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
589 :デフォルトの名無しさん[sage]:2016/10/16(日) 21:21:34.20 ID:LWTFfjDf
>>588
書き出してみるには、どうすればいいのでしょうか?
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
592 :デフォルトの名無しさん[sage]:2016/10/16(日) 21:34:44.24 ID:LWTFfjDf
>>590
手? こういうことですか?

a() {
var n = 0;
return function () {
return ++n;
};
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
594 :デフォルトの名無しさん[sage]:2016/10/16(日) 21:42:13.57 ID:LWTFfjDf
>>591
なぜ返り値だけになるのですか?
var n = 0; も一緒じゃないんですか?
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
596 :デフォルトの名無しさん[sage]:2016/10/16(日) 21:44:43.73 ID:LWTFfjDf
>>593
「一番最初に起動したとき」というのは、
a(); // 1
のときでしょうか?
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
597 :デフォルトの名無しさん[sage]:2016/10/16(日) 21:57:12.53 ID:LWTFfjDf
>>595
それはどうやればいいのでしょうか?
参考書を読んでいるだけなので、デバッグの仕方もよく分かりません。
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
600 :デフォルトの名無しさん[sage]:2016/10/16(日) 22:04:46.53 ID:LWTFfjDf
>>598
aの中には、
var n = 0;
return n;
が入ってるのではないのですか?
なぜ、n = 0; は省かれるのですか?
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
601 :デフォルトの名無しさん[sage]:2016/10/16(日) 22:12:37.29 ID:LWTFfjDf
>>600
間違えました。
aには返り値が入ります。なので、>>598の場合は、aにはnが入って、つまり返り値だけになるのは分かります。

しかし、a(); の場合は、
var n = 0;
return n;
なぜ、こうならないのかが分かりません。
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
604 :デフォルトの名無しさん[sage]:2016/10/16(日) 22:32:07.26 ID:LWTFfjDf
あー、分かりました。
オブジェクトのコピーと混同してました。

var a = Counter();
確かにこれで、var n = 0; は入らないですね。返り値を代入しているだけだから。
すなわち、aには返り値の無名関数が入ると。

で、当然、a();には n = 0 は入ってなくて無名関数だけだから、呼ぶ度に加算される。
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
605 :デフォルトの名無しさん[sage]:2016/10/16(日) 22:33:40.23 ID:LWTFfjDf
>>603
今になって思えば、まさしくその通りです(笑)
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
606 :デフォルトの名無しさん[sage]:2016/10/16(日) 22:35:45.09 ID:LWTFfjDf
>>598
何度もよく読み返してみて自分の誤解に気づきました。
ありがとうございます。
+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©2ch.net
608 :デフォルトの名無しさん[sage]:2016/10/16(日) 23:27:01.47 ID:LWTFfjDf
>>607
出ました。これが!

function () {
return ++n;
}

よーし、明日からまた頑張るぞ!


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。