質問するログイン新規登録

回答編集履歴

1

コメントへの回答を追加

2019/08/14 08:05

投稿

querykuma
querykuma

スコア777

answer CHANGED
@@ -4,4 +4,25 @@
4
4
  [実はletのメモリ効率が悪かった](https://qiita.com/querykuma/items/43a7e97f29ba34866b9e)
5
5
 
6
6
  varとletは箱の数が違います。
7
- varは1つ、letは箱の数がいっぱいあります。
7
+ varは1つ、letは箱の数がいっぱいあります。
8
+
9
+ > letとvarを箱の数の違いで表現されていますが、もう少し詳しく、箱のというイメージで捉えるためのご説明をお願いできませんか?
10
+
11
+ ![箱のイメージ](cd5ba91f71bc75af69eeadb11d83d48f.png)
12
+
13
+ 比喩でなく説明すると、箱はメモリ上の場所です。
14
+
15
+ letはブロックスコープなので、forの繰り返しに対して別の箱が用意されるようです。
16
+ varはforの繰り返しに対して同じ1つの箱を使い回しします。
17
+
18
+ varのときクリックイベントで1つの箱を使い回そうとしたときループが進んで別の値に変わってしまっていたというのがよくある不具合です。
19
+
20
+ > またリンク先の説明でvarとletは箱の数が違うに関して
21
+ > のところでconsoleに4が表示されるのはなぜでしょうか?
22
+
23
+ ![for文の説明](daa6a2c097ff7da39f548253804f8604.png)
24
+
25
+ 他のteratailの質問で**for文の制御フロー**を解説するために作成した図です。
26
+ 変数`i=3`のとき終了条件`i<4`が真になり、命令文本体が実行されます。
27
+ 次に「増減」の`i++`が実行され、`i=4`となり終了条件`i<4`が偽になり、for文が終了します。
28
+ forループ後に`i=4`となります。