回答編集履歴
1
markdown
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
問題は関数スコープで変数iが共有されている事にあり、forループ完了時の変数 i が全ての listener 関数から参照されています。
|
5
|
+
問題は関数スコープで変数iが共有されている事にあり、**for ループ完了時の変数 i が全ての listener 関数から参照されています**。
|
6
6
|
|
7
7
|
kei344 さんの回答では、「ブロックスコープでスコープを分割する(独立させる)」ことで対応しました。
|
8
8
|
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
最も、この場合は event.currentTarget でも参照できるので、細かいテクニックは不要かもしれません。
|
31
|
+
最も、この場合は `event.currentTarget` でも参照できるので、細かいテクニックは不要かもしれません。
|
32
32
|
|
33
33
|
|
34
34
|
|
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
- addEventListenerの第三引数は後方互換性の為に省略しない方が良い
|
47
|
+
- `addEventListener` の第三引数は後方互換性の為に省略しない方が良い
|
48
48
|
|
49
49
|
- listener関数をループ回数分生成してしまっている(メモリの無駄遣い)
|
50
50
|
|
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
```JavaScript
|
54
54
|
|
55
|
-
function handleClick (event) {
|
55
|
+
function handleClick (event) { // listener関数を変数に格納しておく
|
56
56
|
|
57
57
|
var style = event.curentTarget.style;
|
58
58
|
|
@@ -66,7 +66,7 @@
|
|
66
66
|
|
67
67
|
for (let i = 0, len = section_head.length; i < len; i++){
|
68
68
|
|
69
|
-
section_head[i].addEventListener("click", handleClick, false);
|
69
|
+
section_head[i].addEventListener("click", handleClick, false); // 格納した変数からlistener関数を指定する
|
70
70
|
|
71
71
|
}
|
72
72
|
|