トップページ
>
プログラム
>
2016年10月16日
>
LWTFfjDf
書き込み順位&時間帯一覧
2 位
/196 ID中
時間
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Total
書き込み数
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
5
5
1
12
使用した名前一覧
書き込んだスレッド一覧
デフォルトの名無しさん
+ 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ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合は
メール
をしてください。対応します。