回答編集履歴
2
訂正
answer
CHANGED
@@ -65,7 +65,7 @@
|
|
65
65
|
そこで、その外側のスコープ、Aの中で探したところ、定義文が見つかりました。
|
66
66
|
スコープC、Dの定義は閉じ込められているので、外側から参照できません。
|
67
67
|
なので、(3)の変数`x`は、スコープAで定義されている変数だ、とJavaScriptは判断し、その値`0`に`1`を足します。
|
68
|
-
つまり、ここでの変数`x`は`
|
68
|
+
つまり、ここでの変数`x`は`1`です。
|
69
69
|
|
70
70
|
(4)で変数`x`を参照していますが、やはりここでJavaScriptは変数`x`を探しに行きます。
|
71
71
|
まず、参照しているスコープ、Dの中で探したところ、定義文が見つかりませんでした。
|
1
補完
answer
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
※これからする説明は分かりやすさを優先しているため、実際の仕様や実装と異なる部分があると思いますので、ご了解ください。あと、ホイスティングは悪い文明です。
|
2
2
|
|
3
|
+
---
|
4
|
+
|
5
|
+
JavaScript では、**定義されたスコープ**に変数が閉じ込められ、外側に影響することはできません。
|
3
|
-
|
6
|
+
そして、変数を参照する際に、スコープを内側から順番に探してきます。
|
4
7
|
|
5
8
|
```js
|
6
9
|
{ // A
|
@@ -60,6 +63,7 @@
|
|
60
63
|
(3)で変数`x`を参照していますが、やはりここでJavaScriptは変数`x`を探しに行きます。
|
61
64
|
まず、参照しているスコープ、Bの中で探したところ、定義文が見つかりませんでした。
|
62
65
|
そこで、その外側のスコープ、Aの中で探したところ、定義文が見つかりました。
|
66
|
+
スコープC、Dの定義は閉じ込められているので、外側から参照できません。
|
63
67
|
なので、(3)の変数`x`は、スコープAで定義されている変数だ、とJavaScriptは判断し、その値`0`に`1`を足します。
|
64
68
|
つまり、ここでの変数`x`は`0`です。
|
65
69
|
|
@@ -71,17 +75,20 @@
|
|
71
75
|
|
72
76
|
(5)で変数`x`を参照していますが、やはりここでJavaScriptは変数`x`を探しに行きます。
|
73
77
|
まず、参照しているスコープ、Cの中で探したところ、定義文が見つかりました。
|
78
|
+
スコープDの定義は閉じ込められているので、外側から参照できません。
|
74
79
|
なので、(5)の変数`x`は、スコープCで定義されている変数だ、とJavaScriptは判断し、その値`11`に`1`を足します。
|
75
80
|
つまり、ここでの変数`x`は`12`です。
|
76
81
|
|
77
82
|
(6)で変数`x`を参照していますが、やはりここでJavaScriptは変数`x`を探しに行きます。
|
78
83
|
まず、参照しているスコープ、Bの中で探したところ、定義文が見つかりませんでした。
|
79
84
|
そこで、その外側のスコープ、Aの中で探したところ、定義文が見つかりました。
|
85
|
+
スコープC、Dの定義は閉じ込められているので、外側から参照できません。
|
80
86
|
なので、(6)の変数`x`は、スコープAで定義されている変数だ、とJavaScriptは判断し、その値`1`に`1`を足します。
|
81
87
|
つまり、ここでの変数`x`は`2`です。
|
82
88
|
|
83
89
|
(7)で変数`x`を参照していますが、やはりここでJavaScriptは変数`x`を探しに行きます。
|
84
90
|
まず、参照しているスコープ、Aの中で探したところ、定義文が見つかりました。
|
91
|
+
スコープB、C、Dの定義は閉じ込められているので、外側から参照できません。
|
85
92
|
なので、(7)の変数`x`は、スコープAで定義されている変数だ、とJavaScriptは判断し、その値`2`に`1`を足します。
|
86
93
|
つまり、ここでの変数`x`は`3`です。
|
87
94
|
|