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

回答編集履歴

10

a

2016/04/14 02:42

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -32,14 +32,6 @@
32
32
  }
33
33
  ```
34
34
 
35
- あるいはES5でも,`setTimeout`に引数を渡す場合は**その時点で`i`の値が評価されるので**こういう書き方もできます.
36
-
37
- ```JavaScript
38
- for (var i = 0; i < 5; ++i) {
39
- setTimeout(console.log, i, 1000);
40
- }
41
- ```
42
-
43
35
  # 実装
44
36
 
45
37
  今回の場合は,`i`ではなく`json[i]`で束縛してしまったほうがわかりやすいかもしれません.

9

a

2016/04/14 02:42

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -32,6 +32,14 @@
32
32
  }
33
33
  ```
34
34
 
35
+ あるいはES5でも,`setTimeout`に引数を渡す場合は**その時点で`i`の値が評価されるので**こういう書き方もできます.
36
+
37
+ ```JavaScript
38
+ for (var i = 0; i < 5; ++i) {
39
+ setTimeout(console.log, i, 1000);
40
+ }
41
+ ```
42
+
35
43
  # 実装
36
44
 
37
45
  今回の場合は,`i`ではなく`json[i]`で束縛してしまったほうがわかりやすいかもしれません.
@@ -44,7 +52,7 @@
44
52
  $('<a href="#">Click Me!</a>')
45
53
  .appendTo('body')
46
54
  .click((function (value) {
47
- return function (e) {
55
+ return function () {
48
56
  console.log(value);
49
57
  return false;
50
58
  };

8

a

2016/04/14 02:42

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,3 +1,5 @@
1
+ # 説明
2
+
1
3
  イベントリスナ登録の代わりに`setTimeout`を用いて概要を説明します.
2
4
 
3
5
  ```JavaScript
@@ -28,4 +30,40 @@
28
30
  for (let i = 0; i < 5; ++i) {
29
31
  setTimeout(() => console.log(i), 1000);
30
32
  }
33
+ ```
34
+
35
+ # 実装
36
+
37
+ 今回の場合は,`i`ではなく`json[i]`で束縛してしまったほうがわかりやすいかもしれません.
38
+
39
+ 【ES5までの書き方】
40
+
41
+ ```JavaScript
42
+ var json = [1, 2, 3, 4, 5];
43
+ for (var i = 0; i < json.length; ++i) {
44
+ $('<a href="#">Click Me!</a>')
45
+ .appendTo('body')
46
+ .click((function (value) {
47
+ return function (e) {
48
+ console.log(value);
49
+ return false;
50
+ };
51
+ })(json[i]));
52
+ }
53
+ ```
54
+
55
+ 【ES6以降の書き方】
56
+
57
+ ```JavaScript
58
+ 'use strict';
59
+
60
+ const json = [1, 2, 3, 4, 5];
61
+ for (const value of json) {
62
+ $('<a href="#">Click Me!</a>')
63
+ .appendTo('body')
64
+ .click(() => {
65
+ console.log(value);
66
+ return false;
67
+ });
68
+ }
31
69
  ```

7

a

2016/04/14 02:37

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -20,12 +20,12 @@
20
20
  }
21
21
  ```
22
22
 
23
- もしくはECMA Script 6の機能を使っていいのであれば`let`を使えば解決します.
23
+ もしくはECMA Script 6の機能を使っていいのであれば`var`の代わりに`let`を使えば解決します.この宣言は自動的に変数をブロックスコープで束縛します.
24
24
 
25
25
  ```JavaScript
26
26
  'use strict';
27
27
 
28
28
  for (let i = 0; i < 5; ++i) {
29
- setTimeout(() => console.log(i), 1000);
29
+ setTimeout(() => console.log(i), 1000);
30
30
  }
31
31
  ```

6

a

2016/04/14 02:16

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ```JavaScript
14
14
  for (var i = 0; i < 5; ++i) {
15
- setTimeout((function () {
15
+ setTimeout((function (i) {
16
16
  return function () {
17
17
  console.log(i);
18
18
  };

5

a

2016/04/14 02:13

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  for (var i = 0; i < 5; ++i) {
5
5
  setTimeout(function () {
6
6
  console.log(i);
7
- }, 3);
7
+ }, 1000);
8
8
  }
9
9
  ```
10
10
 
@@ -16,7 +16,7 @@
16
16
  return function () {
17
17
  console.log(i);
18
18
  };
19
- })(i), 3);
19
+ })(i), 1000);
20
20
  }
21
21
  ```
22
22
 
@@ -26,6 +26,6 @@
26
26
  'use strict';
27
27
 
28
28
  for (let i = 0; i < 5; ++i) {
29
- setTimeout(() => console.log(i), 3);
29
+ setTimeout(() => console.log(i), 1000);
30
30
  }
31
31
  ```

4

a

2016/04/14 02:11

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -12,14 +12,11 @@
12
12
 
13
13
  ```JavaScript
14
14
  for (var i = 0; i < 5; ++i) {
15
- setTimeout(
16
- (function () {
15
+ setTimeout((function () {
17
- return function () {
16
+ return function () {
18
- console.log(i);
17
+ console.log(i);
19
- };
18
+ };
20
- })(i),
19
+ })(i), 3);
21
- 3
22
- );
23
20
  }
24
21
  ```
25
22
 

3

a

2016/04/14 02:11

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -17,8 +17,9 @@
17
17
  return function () {
18
18
  console.log(i);
19
19
  };
20
- })(i)
20
+ })(i),
21
+ 3
21
- , 3);
22
+ );
22
23
  }
23
24
  ```
24
25
 

2

a

2016/04/14 02:10

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  console.log(i);
19
19
  };
20
20
  })(i)
21
- );
21
+ , 3);
22
22
  }
23
23
  ```
24
24
 

1

a

2016/04/14 02:09

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -25,11 +25,9 @@
25
25
  もしくはECMA Script 6の機能を使っていいのであれば`let`を使えば解決します.
26
26
 
27
27
  ```JavaScript
28
- `use strict`;
28
+ 'use strict';
29
29
 
30
30
  for (let i = 0; i < 5; ++i) {
31
- setTimeout(function () {
31
+ setTimeout(() => console.log(i), 3);
32
- console.log(i);
33
- }, 3);
34
32
  }
35
33
  ```