質問編集履歴

1

追加疑問になります

2025/01/10 03:20

投稿

javastudy
javastudy

スコア9

test CHANGED
@@ -1 +1 @@
1
- 実行結果が何も表示されない理由を知りたいです
1
+ 実行結果理由を知りたいです
test CHANGED
@@ -1,20 +1,80 @@
1
- 下記のJavaScriptコードで、incrementFactory();と実行した際に、
1
+ 下記のJavaScript1コードで、incrementFactory();と実行した際に、
2
- 実行結果は(エラーが出るわけでもなく)何も表示がされないです。
3
-
4
- その理由を教えていただきたいです。
5
-
6
- 想定では、incrementFactory()のreturnで関数aが実行されるということで、
2
+ incrementFactory()のreturnで関数aが実行されるということで、
7
3
  各incrementFactory()が実行されるごとに、let num = 0;で、numが毎回初期化され、0になると思いますので、最終的な実行結果は、
8
4
  1
9
5
  1
10
6
  1
11
7
  1
12
- を想定していました。
8
+ となりました。
9
+
10
+ そして、JavaScript2コードでは、
11
+ ```
12
+ const fn = incrementFactory();
13
+
14
+ fn();
15
+ fn();
16
+ fn();
17
+ fn();
18
+
19
+ ```
20
+ を追記した場合の実行結果を見てみたのですが、
21
+
22
+ return a();ではエラーになり、return a;で正しく動作し、実行結果は、
23
+ 1
24
+ 2
25
+ 3
26
+ 4
27
+ となりました。
28
+
29
+ ここで2つの疑問となりますが、
30
+ なぜJavaScript1では、return a;では問題があり、return a();ではエラーが起きず、
31
+ JavaScript2では、return a;では問題がなく、return a();ではエラーが起きるのかの理由が分かりません。
32
+
33
+ 以下は、JavaScript2で、return a();と書いた場合のエラーになります。
34
+ Uncaught TypeError: fn is not a function
35
+
36
+ また、もう一つの疑問ですが、
37
+ JavaScript2の以下のコードにつきまして、
38
+
39
+ ```
40
+ const fn = incrementFactory();
41
+
42
+ fn();
43
+ fn();
44
+ fn();
45
+ fn();
46
+
47
+ ```
48
+ ↑このようにconst fnに incrementFactory();を格納しただけなのに、
49
+ なぜ、 let num = 0;の初期化は1回だけの実行という扱いにされ、
50
+ 実行結果が1 1 1 1とならず、1 2 3 4となるのかという理論がわからないです。
13
51
 
14
52
  よろしくお願いいたします。
15
53
 
16
54
 
17
- ```JavaScript
55
+ ```JavaScript1
56
+
57
+ function incrementFactory() {
58
+
59
+ let num = 0;
60
+
61
+ function a() {
62
+ num = num + 1;
63
+ console.log(num);
64
+ }
65
+
66
+ return a();
67
+ }
68
+
69
+ incrementFactory();
70
+ incrementFactory();
71
+ incrementFactory();
72
+ incrementFactory();
73
+
74
+ ```
75
+
76
+
77
+ ```JavaScript2
18
78
 
19
79
  function incrementFactory() {
20
80
 
@@ -28,11 +88,22 @@
28
88
  return a;
29
89
  }
30
90
 
31
- incrementFactory();
91
+ const fn = incrementFactory();
92
+
32
- incrementFactory();
93
+ fn();
33
- incrementFactory();
94
+ fn();
34
- incrementFactory();
95
+ fn();
96
+ fn();
97
+
35
98
 
36
99
  ```
37
100
 
38
101
 
102
+
103
+
104
+
105
+
106
+
107
+ よろしくお願いいたします。
108
+
109
+