回答編集履歴
10
語彙テーブル削除
test
CHANGED
@@ -244,22 +244,6 @@
|
|
244
244
|
|
245
245
|
|
246
246
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
| 日本語 | English |
|
252
|
-
|
253
|
-
| ------ | ------- |
|
254
|
-
|
255
|
-
| レキシカル環境 | lexical environment |
|
256
|
-
|
257
|
-
|外側レキシカル環境 | outer lexical environment |
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
247
|
# 追記
|
264
248
|
|
265
249
|
高評価を頂けた方・冷静に適切なコメントを頂けた方、ありがとうございます。一部の荒らし者がコメントに混入してきた為、追記は削除しました(。•ㅅ•。)???? 通知でご迷惑をお掛けしていたら、すみません(。•ㅅ•。)????
|
9
字母 → レキシカル に修正
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
クロージャの仕組みは、
|
1
|
+
クロージャの仕組みは、レキシカル環境(lexical environment)が関わってきます。
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
-
そして、
|
5
|
+
そして、レキシカル環境というのは、JavaScriptエンジンの内部処理を規定するための概念・用語であり、実際のコード(JavaScript)でアクセスする事は出来ません。
|
6
6
|
|
7
7
|
|
8
8
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
>
|
15
|
+
> レキシカル環境は、....の定義に使用される仕様用のタイプです。
|
16
16
|
|
17
17
|
>
|
18
18
|
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
> ...
|
24
24
|
|
25
|
-
>
|
25
|
+
> レキシカル環境と環境記録の値は、純粋に仕様の仕組みであり、ECMAScript実装の特定の現実物に対応する必要はありません。 ECMAScriptプログラムがそのような値(レキシカル環境・環境記録)に直接アクセスしたり操作したりすることは不可能です。
|
26
26
|
|
27
27
|
> ...
|
28
28
|
|
@@ -38,17 +38,17 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
# クロージャと
|
41
|
+
# クロージャとレキシカル環境の関係
|
42
|
-
|
42
|
+
|
43
|
-
##
|
43
|
+
## レキシカル環境(lexical environment)
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
-
|
47
|
+
レキシカル環境とは、大まかにいうと、コード実行処理時に**形成される領域**と、それに伴う**変数の記録簿**の事です。また、両方を指す場合にも使われます。
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
-
コードが処理され始め、**グローバルが処理されている時**や**関数が呼び出された際**に、
|
51
|
+
コードが処理され始め、**グローバルが処理されている時**や**関数が呼び出された際**に、レキシカル環境は生成されます。今JSエンジンが処理している部分を含む"領域"を**レキシカル環境**といい、その外側を**外側レキシカル環境**といいます。
|
52
52
|
|
53
53
|
|
54
54
|
|
@@ -74,9 +74,9 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
|
77
|
+
レキシカル環境: `グローバル`
|
78
|
-
|
78
|
+
|
79
|
-
外側
|
79
|
+
外側レキシカル環境: `null`
|
80
80
|
|
81
81
|
|
82
82
|
|
@@ -84,15 +84,15 @@
|
|
84
84
|
|
85
85
|
|
86
86
|
|
87
|
-
|
87
|
+
レキシカル環境には`goku`という識別子が記録されており、値`"Son Goku"`が対になって保存されています。
|
88
|
-
|
88
|
+
|
89
|
-
グローバルの外側はないので、その様な場合、外側
|
89
|
+
グローバルの外側はないので、その様な場合、外側レキシカル環境は`null`になります。
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
-
また、先程述べたように、関数が呼び出された際にも、
|
95
|
+
また、先程述べたように、関数が呼び出された際にも、レキシカル環境は生成されます。
|
96
96
|
|
97
97
|
|
98
98
|
|
@@ -130,15 +130,15 @@
|
|
130
130
|
|
131
131
|
|
132
132
|
|
133
|
-
|
133
|
+
レキシカル環境: `greeting関数内`
|
134
|
-
|
134
|
+
|
135
|
-
外側
|
135
|
+
外側レキシカル環境: `グローバル`
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
-
処理がグローバル → 関数 へ移ると、関数内の新たな
|
141
|
+
処理がグローバル → 関数 へ移ると、関数内の新たなレキシカル環境が生成され、グローバルを処理していた時に作成されたレキシカル環境は消滅します。
|
142
142
|
|
143
143
|
|
144
144
|
|
@@ -148,7 +148,7 @@
|
|
148
148
|
|
149
149
|
## クロージャ(closure: 閉包)
|
150
150
|
|
151
|
-
クロージャとは、関数が入れ子状で定義されており、且つ、コード実行時に内側の関数が返却された場合、その返却された関数の外側
|
151
|
+
クロージャとは、関数が入れ子状で定義されており、且つ、コード実行時に内側の関数が返却された場合、その返却された関数の外側レキシカル環境が維持される、というメカニズムです。
|
152
152
|
|
153
153
|
|
154
154
|
|
@@ -160,7 +160,7 @@
|
|
160
160
|
|
161
161
|
function outer() {
|
162
162
|
|
163
|
-
// `inner`の外側
|
163
|
+
// `inner`の外側 レキシカル環境
|
164
164
|
|
165
165
|
|
166
166
|
|
@@ -168,7 +168,7 @@
|
|
168
168
|
|
169
169
|
function inner() {
|
170
170
|
|
171
|
-
// `inner`の
|
171
|
+
// `inner`のレキシカル環境
|
172
172
|
|
173
173
|
|
174
174
|
|
@@ -184,19 +184,19 @@
|
|
184
184
|
|
185
185
|
|
186
186
|
|
187
|
-
関数`inner`の
|
187
|
+
関数`inner`のレキシカル環境には、変数は宣言されていません。関数`inner`の外側レキシカル環境には、変数`cnt`が宣言されています。
|
188
|
-
|
189
|
-
|
190
|
-
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
-
先程も言いましたが、関数が実行される際にこの
|
191
|
+
先程も言いましたが、関数が実行される際にこのレキシカル環境は生成され、変数もそこに保存されます。そして、関数の処理が終われば、この両方のレキシカル環境も消去されてしまいます。
|
192
|
-
|
193
|
-
|
194
|
-
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
-
ところがです。関数を返却する関数の場合は(関数`outer`)、その返却された関数(関数`inner`)の外側
|
195
|
+
ところがです。関数を返却する関数の場合は(関数`outer`)、その返却された関数(関数`inner`)の外側レキシカル環境は維持されたまま、関数にくっ付いた状態で返却されるのです。
|
196
|
-
|
197
|
-
|
198
|
-
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
-
ですので、返却される予定の関数`inner`内で、その外側
|
199
|
+
ですので、返却される予定の関数`inner`内で、その外側レキシカル環境の変数`ctn`にアクセスするような処理を書いておくことにより、返却後、inner関数を実行することによって、維持された状態の外側レキシカル環境(変数)にアクセスする事ができるのです。
|
200
200
|
|
201
201
|
|
202
202
|
|
@@ -252,9 +252,9 @@
|
|
252
252
|
|
253
253
|
| ------ | ------- |
|
254
254
|
|
255
|
-
|
|
255
|
+
| レキシカル環境 | lexical environment |
|
256
|
-
|
256
|
+
|
257
|
-
|外側
|
257
|
+
|外側レキシカル環境 | outer lexical environment |
|
258
258
|
|
259
259
|
|
260
260
|
|
8
独自用語の訂正
test
CHANGED
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
-
コードが処理され始め、**
|
51
|
+
コードが処理され始め、**グローバルが処理されている時**や**関数が呼び出された際**に、字母環境は生成されます。今JSエンジンが処理している部分を含む"領域"を**字母環境**といい、その外側を**外側字母環境**といいます。
|
52
52
|
|
53
53
|
|
54
54
|
|
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
```js
|
60
60
|
|
61
|
-
//
|
61
|
+
// グローバル
|
62
62
|
|
63
63
|
|
64
64
|
|
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
字母環境: `
|
77
|
+
字母環境: `グローバル`
|
78
78
|
|
79
79
|
外側字母環境: `null`
|
80
80
|
|
@@ -86,7 +86,7 @@
|
|
86
86
|
|
87
87
|
字母環境には`goku`という識別子が記録されており、値`"Son Goku"`が対になって保存されています。
|
88
88
|
|
89
|
-
|
89
|
+
グローバルの外側はないので、その様な場合、外側字母環境は`null`になります。
|
90
90
|
|
91
91
|
|
92
92
|
|
@@ -98,7 +98,7 @@
|
|
98
98
|
|
99
99
|
```js
|
100
100
|
|
101
|
-
//
|
101
|
+
// グローバル
|
102
102
|
|
103
103
|
|
104
104
|
|
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
function greeting(){
|
112
112
|
|
113
|
-
//
|
113
|
+
// ローカル(ローカル)
|
114
114
|
|
115
115
|
←(処理点)
|
116
116
|
|
@@ -132,13 +132,13 @@
|
|
132
132
|
|
133
133
|
字母環境: `greeting関数内`
|
134
134
|
|
135
|
-
外側字母環境: `
|
135
|
+
外側字母環境: `グローバル`
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
-
処理が
|
141
|
+
処理がグローバル → 関数 へ移ると、関数内の新たな字母環境が生成され、グローバルを処理していた時に作成された字母環境は消滅します。
|
142
142
|
|
143
143
|
|
144
144
|
|
@@ -234,7 +234,7 @@
|
|
234
234
|
|
235
235
|
|
236
236
|
|
237
|
-
###
|
237
|
+
### メソッドによるクロージャ
|
238
238
|
|
239
239
|
今後、余裕があれば追記致します(。•ㅅ•。)
|
240
240
|
|
@@ -256,20 +256,6 @@
|
|
256
256
|
|
257
257
|
|外側字母環境 | outer lexical environment |
|
258
258
|
|
259
|
-
|部分的領域(ローカル) | local |
|
260
|
-
|
261
|
-
|全体的領域(グローバル) | global |
|
262
|
-
|
263
|
-
|変数領域の鎖(スコープチェーン) | scope chain |
|
264
|
-
|
265
|
-
|閉包(クロージャ) | closure |
|
266
|
-
|
267
|
-
|術(メソッド) | method
|
268
|
-
|
269
|
-
|性質(プロパティ) | property
|
270
|
-
|
271
|
-
|物体(オブジェクト) | object
|
272
|
-
|
273
259
|
|
274
260
|
|
275
261
|
|
7
誤字訂正
test
CHANGED
@@ -276,4 +276,4 @@
|
|
276
276
|
|
277
277
|
# 追記
|
278
278
|
|
279
|
-
高評価を頂けた方・冷静に適切なコメントを頂けた方、ありがとうございます。一部の荒らし者が
|
279
|
+
高評価を頂けた方・冷静に適切なコメントを頂けた方、ありがとうございます。一部の荒らし者がコメントに混入してきた為、追記は削除しました(。•ㅅ•。)???? 通知でご迷惑をお掛けしていたら、すみません(。•ㅅ•。)????
|
6
字句→字母 に戻し
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
クロージャの仕組みは、字
|
1
|
+
クロージャの仕組みは、字母環境(lexical environment)が関わってきます。
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
-
そして、字
|
5
|
+
そして、字母環境というのは、JavaScriptエンジンの内部処理を規定するための概念・用語であり、実際のコード(JavaScript)でアクセスする事は出来ません。
|
6
6
|
|
7
7
|
|
8
8
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
> 字
|
15
|
+
> 字母環境は、....の定義に使用される仕様用のタイプです。
|
16
16
|
|
17
17
|
>
|
18
18
|
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
> ...
|
24
24
|
|
25
|
-
> 字
|
25
|
+
> 字母環境と環境記録の値は、純粋に仕様の仕組みであり、ECMAScript実装の特定の現実物に対応する必要はありません。 ECMAScriptプログラムがそのような値(字母環境・環境記録)に直接アクセスしたり操作したりすることは不可能です。
|
26
26
|
|
27
27
|
> ...
|
28
28
|
|
@@ -38,17 +38,17 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
# クロージャと字
|
41
|
+
# クロージャと字母環境の関係
|
42
|
-
|
42
|
+
|
43
|
-
## 字
|
43
|
+
## 字母環境(lexical environment)
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
-
字
|
47
|
+
字母環境とは、大まかにいうと、コード実行処理時に**形成される領域**と、それに伴う**変数の記録簿**の事です。また、両方を指す場合にも使われます。
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
-
コードが処理され始め、**全体的領域が処理されている時**や**関数が呼び出された際**に、字
|
51
|
+
コードが処理され始め、**全体的領域が処理されている時**や**関数が呼び出された際**に、字母環境は生成されます。今JSエンジンが処理している部分を含む"領域"を**字母環境**といい、その外側を**外側字母環境**といいます。
|
52
52
|
|
53
53
|
|
54
54
|
|
@@ -74,9 +74,9 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
字
|
77
|
+
字母環境: `全体的領域`
|
78
|
-
|
78
|
+
|
79
|
-
外側字
|
79
|
+
外側字母環境: `null`
|
80
80
|
|
81
81
|
|
82
82
|
|
@@ -84,15 +84,15 @@
|
|
84
84
|
|
85
85
|
|
86
86
|
|
87
|
-
字
|
87
|
+
字母環境には`goku`という識別子が記録されており、値`"Son Goku"`が対になって保存されています。
|
88
|
-
|
88
|
+
|
89
|
-
全体的領域の外側はないので、その様な場合、外側字
|
89
|
+
全体的領域の外側はないので、その様な場合、外側字母環境は`null`になります。
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
-
また、先程述べたように、関数が呼び出された際にも、字
|
95
|
+
また、先程述べたように、関数が呼び出された際にも、字母環境は生成されます。
|
96
96
|
|
97
97
|
|
98
98
|
|
@@ -130,15 +130,15 @@
|
|
130
130
|
|
131
131
|
|
132
132
|
|
133
|
-
字
|
133
|
+
字母環境: `greeting関数内`
|
134
|
-
|
134
|
+
|
135
|
-
外側字
|
135
|
+
外側字母環境: `全体的領域`
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
-
処理が全体的領域 → 関数 へ移ると、関数内の新たな字
|
141
|
+
処理が全体的領域 → 関数 へ移ると、関数内の新たな字母環境が生成され、全体的領域を処理していた時に作成された字母環境は消滅します。
|
142
142
|
|
143
143
|
|
144
144
|
|
@@ -148,7 +148,7 @@
|
|
148
148
|
|
149
149
|
## クロージャ(closure: 閉包)
|
150
150
|
|
151
|
-
クロージャとは、関数が入れ子状で定義されており、且つ、コード実行時に内側の関数が返却された場合、その返却された関数の外側字
|
151
|
+
クロージャとは、関数が入れ子状で定義されており、且つ、コード実行時に内側の関数が返却された場合、その返却された関数の外側字母環境が維持される、というメカニズムです。
|
152
152
|
|
153
153
|
|
154
154
|
|
@@ -160,7 +160,7 @@
|
|
160
160
|
|
161
161
|
function outer() {
|
162
162
|
|
163
|
-
// `inner`の外側 字
|
163
|
+
// `inner`の外側 字母環境
|
164
164
|
|
165
165
|
|
166
166
|
|
@@ -168,7 +168,7 @@
|
|
168
168
|
|
169
169
|
function inner() {
|
170
170
|
|
171
|
-
// `inner`の字
|
171
|
+
// `inner`の字母環境
|
172
172
|
|
173
173
|
|
174
174
|
|
@@ -184,19 +184,19 @@
|
|
184
184
|
|
185
185
|
|
186
186
|
|
187
|
-
関数`inner`の字
|
187
|
+
関数`inner`の字母環境には、変数は宣言されていません。関数`inner`の外側字母環境には、変数`cnt`が宣言されています。
|
188
|
-
|
189
|
-
|
190
|
-
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
-
先程も言いましたが、関数が実行される際にこの字
|
191
|
+
先程も言いましたが、関数が実行される際にこの字母環境は生成され、変数もそこに保存されます。そして、関数の処理が終われば、この両方の字母環境も消去されてしまいます。
|
192
|
-
|
193
|
-
|
194
|
-
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
-
ところがです。関数を返却する関数の場合は(関数`outer`)、その返却された関数(関数`inner`)の外側字
|
195
|
+
ところがです。関数を返却する関数の場合は(関数`outer`)、その返却された関数(関数`inner`)の外側字母環境は維持されたまま、関数にくっ付いた状態で返却されるのです。
|
196
|
-
|
197
|
-
|
198
|
-
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
-
ですので、返却される予定の関数`inner`内で、その外側字
|
199
|
+
ですので、返却される予定の関数`inner`内で、その外側字母環境の変数`ctn`にアクセスするような処理を書いておくことにより、返却後、inner関数を実行することによって、維持された状態の外側字母環境(変数)にアクセスする事ができるのです。
|
200
200
|
|
201
201
|
|
202
202
|
|
@@ -252,9 +252,9 @@
|
|
252
252
|
|
253
253
|
| ------ | ------- |
|
254
254
|
|
255
|
-
| 字
|
255
|
+
| 字母環境 | lexical environment |
|
256
|
-
|
256
|
+
|
257
|
-
|外側字
|
257
|
+
|外側字母環境 | outer lexical environment |
|
258
258
|
|
259
259
|
|部分的領域(ローカル) | local |
|
260
260
|
|
5
荒らしコメが多いため、追記削除
test
CHANGED
@@ -274,12 +274,6 @@
|
|
274
274
|
|
275
275
|
|
276
276
|
|
277
|
-
# 追記
|
277
|
+
# 追記
|
278
|
-
|
279
|
-
|
278
|
+
|
280
|
-
|
281
|
-
|
279
|
+
高評価を頂けた方・冷静に適切なコメントを頂けた方、ありがとうございます。一部の荒らし者が混入コメントに混入してきた為、追記は削除しました(。•ㅅ•。)???? 通知でご迷惑をお掛けしていたら、すみません(。•ㅅ•。)????
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
- 回答に間違いが含まれる
|
4
変値→変数 訂正
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
字句環境とは、大まかにいうと、コード実行処理時に**形成される領域**と、それに伴う**変
|
47
|
+
字句環境とは、大まかにいうと、コード実行処理時に**形成される領域**と、それに伴う**変数の記録簿**の事です。また、両方を指す場合にも使われます。
|
48
48
|
|
49
49
|
|
50
50
|
|
@@ -260,7 +260,7 @@
|
|
260
260
|
|
261
261
|
|全体的領域(グローバル) | global |
|
262
262
|
|
263
|
-
|変
|
263
|
+
|変数領域の鎖(スコープチェーン) | scope chain |
|
264
264
|
|
265
265
|
|閉包(クロージャ) | closure |
|
266
266
|
|
3
お願い追記
test
CHANGED
@@ -269,3 +269,17 @@
|
|
269
269
|
|性質(プロパティ) | property
|
270
270
|
|
271
271
|
|物体(オブジェクト) | object
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
# 追記[19.06.21]
|
278
|
+
|
279
|
+
## 低評価を押された方へのお願い????
|
280
|
+
|
281
|
+
以下の項目に該当する場合、理由を一言でもよろしいのでコメント頂きたく存じます???? お手数ですが宜しくお願い致します<(_ _)>????
|
282
|
+
|
283
|
+
|
284
|
+
|
285
|
+
- 回答に間違いが含まれる
|
2
包囲→閉包
test
CHANGED
@@ -146,7 +146,7 @@
|
|
146
146
|
|
147
147
|
|
148
148
|
|
149
|
-
## クロージャ(closure: 包
|
149
|
+
## クロージャ(closure: 閉包)
|
150
150
|
|
151
151
|
クロージャとは、関数が入れ子状で定義されており、且つ、コード実行時に内側の関数が返却された場合、その返却された関数の外側字句環境が維持される、というメカニズムです。
|
152
152
|
|
@@ -262,7 +262,7 @@
|
|
262
262
|
|
263
263
|
|変値領域の鎖(スコープチェーン) | scope chain |
|
264
264
|
|
265
|
-
|包
|
265
|
+
|閉包(クロージャ) | closure |
|
266
266
|
|
267
267
|
|術(メソッド) | method
|
268
268
|
|
1
誤字修正
test
CHANGED
@@ -138,7 +138,7 @@
|
|
138
138
|
|
139
139
|
|
140
140
|
|
141
|
-
処理が全体的領域 → 関数 へ移ると、関数内の新たな字句環境が生成され、全体的領域を
|
141
|
+
処理が全体的領域 → 関数 へ移ると、関数内の新たな字句環境が生成され、全体的領域を処理していた時に作成された字句環境は消滅します。
|
142
142
|
|
143
143
|
|
144
144
|
|