-
Notifications
You must be signed in to change notification settings - Fork 4
/
832.txt
462 lines (384 loc) · 25.9 KB
/
832.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
[134] [[Web]] において実行されるものには、いくつかの種類があります。
[FIG(list middle)[
- [[スクリプト]]
-- [[古典スクリプト]]
-- [[モジュールスクリプト]]
- [[関数]]
-- [[著者]]の[[関数]]
--- [[コールバック関数]]
--- [[利用者オブジェクト]]の[[演算]]
--- [[利用者オブジェクト]]の[[属性値]]の[[取得]]
--- [[利用者オブジェクト]]の[[属性値]]の[[設定]]
--- [[約束コールバック]]
-- [[プラットフォーム][プラットフォームオブジェクト]]の[[関数]]
-- [[プラットフォーム][プラットフォームオブジェクト]]の[[取得器]]
-- [[プラットフォーム][プラットフォームオブジェクト]]の[[設定器]]
]FIG]
* 仕様書
[REFS[
- [99] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-08-05 16:28:45 +09:00]]) <https://html.spec.whatwg.org/#performing-structured-clones-from-other-specifications>
- [22] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <https://www.whatwg.org/specs/web-apps/current-work/#jump-to-a-code-entry-point>
- [68] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-24 02:49:49 +09:00]] 版) <https://html.spec.whatwg.org/#import-scripts-into-worker-global-scope>
- [164] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-27 03:13:07 +09:00]] 版) <https://html.spec.whatwg.org/#running-script>
- [76] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-12-22 10:28:15 +09:00]] 版) <https://html.spec.whatwg.org/#script-corresponding-to-the-running-execution-context>
- [62] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-08-01 13:15:24 +09:00]]) <https://html.spec.whatwg.org/#concept-incumbent-everything>
- [303] [CITE[Web IDL (Second Edition)]] ([TIME[2015-02-03 13:44:14 +09:00]] 版) <http://heycam.github.io/webidl/#es-invoking-callback-functions>
- [276] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-12-22 10:28:15 +09:00]] 版) <https://html.spec.whatwg.org/#enqueuejob(queuename,-job,-arguments)>
]REFS]
* 古典スクリプトの実行
[23] [DFN[[RUBYB[古典スクリプトの実行]@en[run a classic script]]]] [SRC[>>22]]
(旧[DFN[[RUBYB[[[コード入口点に飛ぶ]]]@en[jump to a code entry-point]]]])
は、次の[[引数]]を持つ手続きです。
[FIG(list members)[
: [VAR[スクリプト]] : [[古典スクリプト]]。
: [VAR[[RUBYB[エラーを再度投げる]@en[rethrow errors]]]]フラグ :
[[例外]]が投げられた時に、それを呼び出し元の[[スクリプト]]に伝播させるべきかどうかを指定します。
基本的には[[偽]]で、[[例外]]は[[例外の報告]]へと回されますが、
[CODE(DOMm)@en[[[importScripts]]]] では呼び出し元に引き渡されます。
[[既定値]]は[[偽]]です [SRC[>>22]]。
]FIG]
[45] 次のようにします [SRC[>>22]]。
[FIG(steps)[
= [78] [VAR[設定群]]を、[VAR[スクリプト]]の[F[[[設定群オブジェクト]]]]に設定します。
= [150] [VAR[設定群]]について[[スクリプトを実行できるか検査]]した結果が「実行しない」の場合、
== [146] [[未定義]]を返し、ここで停止します。
= [151] [VAR[設定群]]について[[スクリプトを実行する準備]]をします。
= [24] [VAR[スクリプト]]の[F[再び投げるエラー]]が [CODE[null]] の場合、
== [156] [VAR[評価状態]]を、
[VAR[スクリプト]]の[F[記録][スクリプト]]について [CODE[ScriptEvaluation]]
した結果に設定します。
[[走っているスクリプトの中断]]があった場合には、
[VAR[評価状態]]を [CODE[null]] に設定します。
= [157] それ以外の場合、
== [25] [VAR[評価状態]]を、新しい [[Completion]] に設定します。
[FIG(list members)[ [82] [[Completion]]
: [F(ss)[Type]] : [[throw]]
: [F(ss)[Value]] : [VAR[スクリプト]]の[F[再び投げるエラー]]
: [F(ss)[Target]] : [[空]]
]FIG]
= [52] [VAR[評価状態]]が [[abrupt completion]] の場合、
== [84] [VAR[エラーを再度投げる]]が[[真]]の場合、
=== [26] [VAR[設定群]]について[[スクリプトを走らせた後の片付け]]をします。
=== [155] [VAR[スクリプト]]の[F[エラーミュート]]フラグが[[真]]の場合、
==== [108] [CODE(DOMe)@en[NetworkError]] [CODE[DOMException]] を[[投げ]]ます。
=== [158] それ以外の場合、
==== [85] [VAR[評価状態]]の [F(ss)[Value]] を[[再び投げ]]ます。
== [87] それ以外の場合、
=== [56] [VAR[スクリプト]]と[VAR[評価状態]]の [F(ss)[Value]]について[[例外を報告]]します。
=== [86] [VAR[設定群]]について[[スクリプトを走らせた後の片付け]]をします。
=== [53] [[未定義]]を返します。
= [160] それ以外の場合、
== [54] [VAR[設定群]]について[[スクリプトを走らせた後の片付け]]をします。
== [63] [VAR[評価結果]]が [[normal completion]] の場合、
=== [81] [VAR[評価結果]]の [F(ss)[Value]] を返します。
== [83] それ以外の場合、
=== [106] [[未定義]]を返します。
]FIG]
;; [79] この手続きが返す値が使われるのは、 [CODE(URI)@en[[[javascript:]]]]
[[URL]] の実行の時だけのようです。
[135] [[古典スクリプトの実行]]は、[[古典スクリプトの作成]]の後、適当なタイミングで行われます。
* モジュールスクリプトの実行
[80] [[モジュールスクリプト]][VAR[スクリプト]]、
[[boolean]] [VAR[エラーを再び投げる]] (既定値[[偽]])
について[DFN[[RUBYB[モジュールスクリプトを実行]@en[run a module script]]]]するとは、
次のようにしなければ[MUST[なりません]] [SRC[>>22]]。
[FIG(steps)[
= [90] [VAR[設定群オブジェクト]]を、[VAR[スクリプト]]の[F[設定群オブジェクト]]に設定します。
= [91] [VAR[設定群オブジェクト]]について[[スクリプトを実行できるか検査]]した結果が「実行しない」なら、
== [138] ここで停止します。
= [113] [VAR[設定群オブジェクト]]について[[スクリプトを実行する準備]]をします。
= [139] [VAR[スクリプト]]の[F[再び投げるエラー]]が [CODE[null]] の場合、
== [92] [VAR[記録]]を、[VAR[スクリプト]]の[F[記録][スクリプト]]に設定します。
== [114] [VAR[評価状態]]を、 [VAR[記録]]の [F[[CODE[Evaluation]]]] を実行した結果に設定します。
[[走っているスクリプトの中断]]があった場合には、
[VAR[評価状態]]を、新しい [[Completion]] に設定します。
[FIG(list members)[ [109] [[Completion]]
: [F(ss)[Type]] : [[throw]]
: [F(ss)[Value]] : 新しい [CODE[QuotaExceededError]] [CODE[DOMException]]
: [F(ss)[Target]] : [[空]]
]FIG]
= [107] それ以外の場合、
== [88] [VAR[評価状態]]を、新しい [[Completion]] に設定します。
[FIG(list members)[ [89] [[Completion]]
: [F(ss)[Type]] : [[throw]]
: [F(ss)[Value]] : [VAR[スクリプト]]の[F[再び投げるエラー]]
: [F(ss)[Target]] : [[空]]
]FIG]
== [115] [VAR[評価状態]]が [[abrupt completion]] の場合、
== [141] [VAR[エラーを再び投げる]]が[[真]]の場合、
=== [152] [VAR[評価状態]]の [F(ss)[Value]] を[[再び投げ]]ます。
== [159] それ以外の場合、
=== [101] [VAR[スクリプト]]と[VAR[評価状態]]の[F(ss)[Value]]について、[[例外を報告]]します。
= [153] [VAR[設定群オブジェクト]]について[[スクリプトを走らせた後の片付け]]をします。
]FIG]
* コールバック関数の実行
[3] [[コールバック関数]]の[DFN[[RUBYB[呼び出し]@en[invoke]]]] [SRC[>>303]] は、
次の[[引数]]に関する操作です。
[FIG(list members)[
: [VAR[呼び出し可能]] : [[コールバック関数]]として使用する、[[コールバック関数型]]の値。
: [VAR[this]] : [[コールバック関数]]の [CODE(JS)@en[this]] として使う値。
[[既定値]]は [CODE(JS)@en[undefined]] [SRC[>>303]]。
: [VAR[引数リスト]] : [[コールバック関数]]の[[引数]]の[[リスト]]。
各値は、[[IDL値]]か、省略を表す特殊値「[RUBYB[なし]@en[missing]]」のいずれかです [SRC[>>303]]。
]FIG]
[4] 次のようにします [SRC[>>303]]。
[FIG(steps)[
= [17] [VAR[F]] を、[VAR[呼び出し可能]]の [[JavaScript]] [[オブジェクト]]に設定します。
= [18] [VAR[F]] に [CODE[IsCallable]] を適用した結果が[[偽]]なら、
== [7] [VAR[呼び出し可能]]の[F[返り型]]が [CODE(IDL)@en[void]] なら、
=== [10] ここで停止します。
== [13] それ以外なら、
=== [15] [CODE(JS)@en[undefined]] を[VAR[呼び出し可能]]の[F[返り型]]に[[変換][変換 (WebIDL)]]した結果を返し、ここで停止します。
= [5] [VAR[realm]] を、 [VAR[F]] の[F[Realm]]に設定します。
= [16] [VAR[関連設定群]]を、 [VAR[realm]] の[F[設定群オブジェクト]]に設定します。
= [19] [VAR[蓄積設定群]]を、[VAR[値]]の[F[コールバック文脈]]に設定します。
= [20] [VAR[関連設定群]]について[[スクリプトを走らせる準備]]を実行します。
= [21] [VAR[蓄積設定群]]について[[コールバック実行の準備]]を実行します。
= [42] [VAR[リスト]]を、空の[[リスト]]に設定します。
= [59] [VAR[数]]を、 [N[0]] に設定します。
= [60] [VAR[引数リスト]]の各値[VAR[値]]について、順に、
== [27] [VAR[値]]が「なし」なら、
=== [28] [VAR[リスト]]の末尾に [CODE(JS)@en[undefined]] を追加します。
== [29] それ以外なら、
=== [31] [VAR[結果]]を、[VAR[値]]を [[JavaScript]] に[[変換][変換 (WebIDL)]]した結果に設定します。
=== [32] [VAR[結果]]が [[abrupt completion]] なら、
==== [33] >>43 に飛びます。
=== [34] それ以外なら、
==== [35] [VAR[リスト]]の末尾に[VAR[結果]]の[F(ss)[値]]を追加します。
=== [37] [VAR[数]]を[[インクリメント]]します。
= [38] [VAR[リスト]]の末尾の値を削除して要素数が[VAR[数]]となるようにします。
= [39] [VAR[結果]]を、[CODE[[[Call]]([VAR[F]], [VAR[this]], [VAR[リスト]])]]
の結果に設定します。
= [40] [VAR[結果]]が [[abrupt completion]] 以外なら、
== [41] [VAR[結果]]を、[VAR[結果]]の[F(ss)[値]]を[VAR[呼び出し可能]]の[F[返り型]]に[[変換][変換 (WebIDL)]]した結果に設定します。
= [57] [VAR[蓄積設定群]]について[[コールバックを走らせた後の片付け]]を実行します。
= [43] [VAR[関連設定群]]について[[スクリプトを走らせた後の片付け]]を実行します。
= [44] [VAR[結果]]が [[abrupt completion]] なら、
== [47] [VAR[呼び出し可能]]の[F[返り型]]が[[約束型]]なら、
=== [50] [VAR[結果]]を、[CODE[[[%Promise%]].[[reject]]]] の[[初期値]]を呼び出した結果に設定します。
[FIG(list members)[
: [VAR[[CODE(JS)[this]]]] : [CODE[%Promise%]]
: [VAR[引数リスト]] :
[FIG(list)[
= [VAR[結果]]の[F(ss)[値]]
]FIG]
]FIG]
=== [51] [VAR[結果]]を[VAR[返り型]]に[[変換][変換 (WebIDL)]]した結果を返します。
== [48] それ以外なら、
=== [49] [VAR[結果]]を返します。
= [45] それ以外なら、
== [46] [VAR[結果]]を返します。
]FIG]
[9] つまり[[コールバック関数]]を実行するものですが、
[[JavaScript]] と [[Web IDL]] の値の変換、
[[JavaScript実行文脈スタック]]の操作、
[[例外]]の [CODE(DOMi)@en[[[Promise]]]] 化を適宜処理するものです。
[11] [F(ss)[[[Call]]]] の呼び出しは、
途中で[[走っているスクリプトの実行中断]]が発生することがあります。
[58] 似たような処理が[[利用者オブジェクト]]についても規定されています。
[61] [[コールバック関数の呼び出し]]は、次の場面で行われます。
[FIG(list)[
- [[Web IDL]] [[iterator]] の [CODE(IDL)@en[[[forEach]]]] [SRC[[[Web IDL]]]]
- [[イベントハンドラー]]の呼び出し [SRC[[[HTML Standard]]]]
- [[タイマー]]の呼び出し [SRC[[[HTML Standard]]]]
- [[アニメーションフレームコールバック]]の呼び出し [SRC[[[HTML Standard]]]]
- [[カスタム要素反応群の呼び出し]]からの[[コールバック反応]]の呼び出し [SRC[[[HTML Standard]]]]
- [CODE(DOMm)@en[toBlob]] の [CODE(DOMi)@en[BlobCallback]] の呼び出し
- [[変異観察器]]
;; [8] [[Geolocation API]] の[[コールバック]]、
[CODE(DOMm)@en[[[getAsString]]]] の[[コールバック]]、
[CODE(DOMi)@en[[[RTCPeerConnection]]]] の[[コールバック]]、
[CODE(DOMm)@en[requestIdleCallback]] の[[コールバック]]、
[CODE(DOMi)@en[[[NSResolver]]]] でも同様の処理を挟む必要がありそうですが、
明文化されていません。
[HISTORY[
- [CODE(DOMm)@en[setImmediate]]
- [CODE(DOMi)@en[[[PortCollection]]]] の [CODE(DOMm)@en[[[iterate]]]] の[[コールバック]]でも同様の処理を挟む必要がありそうですが、
明文化されていません。
]HISTORY]
]FIG]
;; [12] [CODE(JS)@en[[[Promise]]]] の[[コールバック]]は、
[[JavaScriptジョブの実行]]で処理されます。
;; [14] [[カスタム要素構築器]]
([CODE[CustomElementConstructor]]) は、[[要素の格上げ]]で呼び出されます。
他の[[コールバック]]とは違った処理となっています。
[136] [[モジュールスクリプトの実行]]は、[[モジュールスクリプトの作成]]の後、適当なタイミングで行われます。
* コールバックインターフェイスの処理の実行
@@ [6] [[コールバックインターフェイス]]
[112] [[演算]]:
[FIG(short list)[
- [[イベントリスナー]]
- [CODE(DOMi)@en[NodeFilter]]
]FIG]
* 約束コールバックの実行
[118] [[抽象操作]] [CODE[EnqueueJob]] の[[マイクロタスク]]は、
[VAR[ジョブ設定群]]、[VAR[現職設定群]]、
[VAR[job]]、
[VAR[arguments]]、
[VAR[スクリプト実行文脈]]について次のようにしなければ[MUST[なりません]] [SRC[>>276]]。
[FIG(steps)[
= [119] [VAR[ジョブ設定群]]に関して[[スクリプトを実行できるか検査]]した結果が「実行しない」なら、
== [120] ここで停止します。
= [121] [VAR[ジョブ設定群]]について[[スクリプト実行の準備]]をします。
= [122] [VAR[現職設定群]]について[[コールバック実行の準備]]をします。
= [161] [VAR[スクリプト実行文脈]]を、
[[JavaScript実行文脈スタック]]に [[push]] します。
= [123] [VAR[結果]]を、[VAR[job]] で指定された[[抽象操作]]を実行した結果に設定します。[VAR[arguments]] の各[[要素]]を[[引数]]とします。
= [162] [[JavaScript実行文脈]]から[VAR[スクリプト実行文脈]]を
[[pop]] します。
= [124] [VAR[現職設定群]]に関して[[コールバックを走らせた後の片付け]]をします。
= [125] [VAR[ジョブ設定群]]に関して[[スクリプトを走らせた後の片付け]]をします。
= [126] [VAR[結果]]が [[abrupt completion]] なら、
== [127] [VAR[結果]]の[F(ss)[Value]]について[[例外を報告]]します。
]FIG]
[117] これは実際には [CODE[EnqueueJob]] された[[約束]]ジョブ ([CODE[PromiseJobs]]
[[ジョブキュー]]の[[ジョブ]])
の実行でのみ使われます。[DFN[約束コールバックを実行]]の場合、 [VAR[job]] は [CODE(JS)@en[[[Promise]]]]
の[[解決]]や[[拒絶]]の[[コールバック]]の実行に当たります。
[133] 指定された[[抽象操作]]は、[[走っているスクリプトの実行中断]]で途中で中断される可能性もあります。
[HISTORY[
[128] [CODE[[DFN[NextJob]] [VAR[result]]]] は、次のようにしなければ[MUST[なりません]]
[SRC[>>276]]。
[FIG(steps)[
= [129] [VAR[result]] が [[abrupt completion]] なら、
== [130] [CODE[[VAR[result]].[F(ss)[value]]]] の[[例外を報告]]します。
]FIG]
;; [131] これは [[ECMAScript]] 仕様書と異なる [[HTML Standard]] 独自のアルゴリズムで、
[[意図的違反]]とされています。
;; [132] つまり [CODE(JS)@en[[[Promise]]]] の[[コールバック]]で発生した[[例外]]は、
[[例外の報告]]で処理されます。
]HISTORY]
* 準備と後片付け
[94] [[環境設定群オブジェクト]][VAR[設定群オブジェクト]]についての[DFN[[RUBYB[[[スクリプトを走らせる準備]]]@en[prepare to run script]]]]は、
次のようにします [SRC[>>22]]。
[FIG(steps)[
= [97] [[JavaScript実行文脈スタック]]に、
[VAR[設定群オブジェクト]]の[F[[[realm実行文脈]]]]を[[積み]]ます。
(新たな[[走っているJavaScript実行文脈]]となります。)
]FIG]
[95] [[環境設定群オブジェクト]][VAR[設定群オブジェクト]]について[DFN[[RUBYB[[[スクリプトを走らせた後の片付け]]]@en[clean up after running a script]]]]は、
次のようにします [SRC[>>22]]。
[FIG(steps)[
= [30] [VAR[設定群オブジェクト]]の[F[[[realm実行文脈]]]]を[[JavaScript実行文脈スタック]]から削除します。
= [32] [[JavaScript実行文脈スタック]]が空なら、
== [103] [[マイクロタスクチェックポイント]]を行います。
=- [34] ここでは[[スクリプト]]が再帰的に走らせられることがあります。
]FIG]
[HISTORY[
[102] かつては[[大域スクリプト片付けジョブを走らせます]]の処理も行われていました。
]HISTORY]
;; [71] [[スクリプト実行の準備]]と[[スクリプトを走らせた後の片付け]]は、
[[コールバック関数の呼び出し]]や
[CODE[EnqueueJob]] による[[マイクロタスク]]でも呼び出されます。
[65] [DFN[[RUBYB[コールバックを走らせる準備]@en[prepare to run a callback]]]]は、
[[環境設定群オブジェクト]][VAR[設定群]]について、次のようにします [SRC[>>62]]。
[FIG(steps)[
= [66] [VAR[設定群]]を、[[イベントループ]]の[F[バックアップ現職設定群オブジェクトスタック]]に
[[push]] します。
= [67] [VAR[文脈]]を、[[最上スクリプト持ち実行文脈]]に設定します。
= [64] [VAR[文脈]]が [CODE[null]] 以外なら、
== [69] [VAR[文脈]]の[F[現職決定時に飛ばす計数器]]を[[インクリメント]]します。
]FIG]
[70] [DFN[[RUBYB[コールバックを走らせた後の片付け]@en[clean up after running a callback]]]]は、
[[環境設定群オブジェクト]][VAR[設定群]]について、次のようにします [SRC[>>62]]。
[FIG(steps)[
= [72] [VAR[文脈]]を、[[最上スクリプト持ち実行文脈]]に設定します。
= [73] [VAR[文脈]]が [CODE[null]] でなければ、
== [74] [VAR[文脈]]の[F[現職決定時に飛ばす計数器]]を[[デクリメント]]します。
= [75] [[イベントループ]]の[F[バックアップ現職設定群オブジェクトスタック]]から[VAR[設定群]]を削除します。
(スタックの最上にあるはずです。)
]FIG]
[100] これらの処理は、次の場面で呼び出されます。
[FIG(list)[
- [[利用者エージェント]]からの[[構造化クローン]]の前後 [SRC[>>99]]
- [[約束コールバックの実行]]
- [[古典スクリプトの実行]] ☆
- [[モジュールスクリプトの実行]] ☆
- [[利用者オブジェクトの操作の呼び出し]]
- [[利用者オブジェクトの属性値の取得]]
- [[利用者オブジェクトの属性値の設定]]
- [[コールバック関数の呼び出し]]
]FIG]
;; [105] ☆は、[[スクリプト]]の準備と片付けのみ行います。
それ以外は、[[スクリプト]]と[[コールバック]]の準備と片付けの両方を行います。
両方を行う場合であっても、使用する[VAR[設定群]]は異なることがあります。
[HISTORY[
[98] [[スクリプト]]や[[コールバック]]の実行に関する処理は幾度もの改訂を経ており、
処理内容も用語も大きく変化しています。
[154] かつては、後の[[スクリプトを走らせる準備]]と[[スクリプトを実行できるか検査]]とを合わせて[DFN[[RUBYB[[[コールバックを走らせる準備]]]@en[prepare to run a callback]]]]と呼んでいました。
[[スクリプトを走らせた後の片付け]]は、
[DFN[[RUBYB[[[コールバックを走らせた後の片付け]]]@en[clean up after running a callback]]]]と呼ばれていました。
(これらは現在のコールバックの準備と片付けとは別物でした。)
[104] [[JavaScript実行文脈スタック]]と[[スクリプト設定群オブジェクトのスタック]]が統合される前は、次のように規定されていました。
[35] [[JavaScript]] の [CODE(JS)[[[SourceElements]]]] が評価される時には、
それに対応する[[スクリプト]]の[[設定群オブジェクト]]を評価の直前に[[スクリプト設定群オブジェクトのスタック]]に
[[push]] し、直後に [[pop]] しなければ[['''なりません''']] [SRC[>>22]]。
[37] [[ES5]] では [CODE(JS)@en[[[SourceElements]]]] は[[プログラム]]の全体と、[[関数]]の中身で使われています。
[[ES6]] では [CODE(JS)@en[[[SourceElements]]]] がなくなってしまっています。 [TIME[2014-04-15T04:21:08.00Z]]
;; [36] [[コールバック関数の呼び出し]]と似ていますが、いくつか違いがあります。
[55] >>25 では[[実行時エラー]]が発生したり、[[例外]]が [[catch]] されなかったりすることがあります。
この場合の挙動は[[エラーの報告]]の項をご覧ください。
]HISTORY]
[165] [[JavaScriptエンジン]]の[DFN[[F[[RUBYB[[[走っているスクリプト]]]@en[running script]]]]]]は、
[F[走っているJavaScript実行文脈]]の [F[ScriptOrModule]] の
[F(ss)[HostDefined]] の値である[[スクリプト]]です [SRC[>>164]]。
[HISTORY[
[77] [[JavaScriptエンジン]]の[DFN[[F[[RUBYB[[[走っている実行文脈に対応するスクリプト]]]@en[script corresponding to the running execution context]]]]]]は、
[F[[[走っているJavaScript実行文脈]]]]の [F[[CODE[ScriptOrModule]]]]
の [CODE[[F(ss)[HostDefined]]]] の値である[[スクリプト]]です。 [SRC[>>76]]
]HISTORY]
* 実行制限と中断
[49] [[スクリプトの中断]]を参照。
* 歴史
[2] [[スクリプト]]、[[コールバック関数]]も参照。
[137] [CITE@en[Handle error cases during module script tree fetching/running better]]
([[domenic]]著, [TIME[2016-08-09 12:06:32 +09:00]])
<https://github.com/whatwg/html/commit/e1af86747f591e33fd0f3f21f301dc866868c9d4>
[93] [CITE@en[Make quality an explicit argument for canvas image conversion]]
([[domenic]]著, [TIME[2016-08-27 03:42:08 +09:00]])
<https://github.com/whatwg/html/commit/7d25c4c2452b705220417ffb951c9b89e04ba50b>
[110] [CITE@en[An exception is not always an object (e.g., throw 7)]]
([[annevk]]著, [TIME[2016-08-30 04:09:45 +09:00]])
<https://github.com/whatwg/html/commit/6f32dc2cdbde1991dfa8ba2bf79a2eebe18324cd>
[111] [CITE@en[Editorial: integrate more explicitly with IDL for callbacks]]
([[annevk]]著, [TIME[2016-08-26 18:42:24 +09:00]])
<https://github.com/whatwg/dom/commit/8906b74be70c008757a5ef4f58455908bfcab200>
[142] [CITE@en[Remove global script clean-up jobs]]
([[mkruisselbrink]]著, [TIME[2017-02-03 03:53:33 +09:00]])
<https://github.com/whatwg/html/commit/305aa6705e2ae65ae8a407c53316359dfe286eba>
[143] [CITE@en[Clarify the setting of scripts' '''[''''''['''HostDefined''']'''''']''']]
([[domenic]]著, [TIME[2017-04-18 06:12:20 +09:00]])
<https://github.com/whatwg/html/commit/9b4d858a14bf39aec5624a12f1bb598cb63385aa>
[144] [CITE@en[Simplify the definition of the "entry" concept]]
([[domenic]]著, [TIME[2017-04-18 22:49:58 +09:00]])
<https://github.com/whatwg/html/commit/36d771a0c90c3534fe0d4c6a23ca240979b94dfd>
[1] [CITE@en[Do not attempt to instantiate modules that have previously failed]]
([[domenic]]著, [TIME[2017-04-26 03:54:55 +09:00]])
<https://github.com/whatwg/html/commit/df58a1c6b10739f12efbd80f7fb6205fda0a59ed>
[96] [CITE@en[Fix error cases of <script type=module>]]
([[domenic]]著, [TIME[2017-05-13 01:50:49 +09:00]])
<https://github.com/whatwg/html/commit/115763124a641e8814665c5014d28155f95ff441>
[145] [CITE@en[Improve module instantiation/evaluation, especially around errors]]
([[domenic]]著, [TIME[2017-08-04 05:13:45 +09:00]])
<https://github.com/whatwg/html/commit/2b408b65a11fe76b6588b744e0ae74d30ff29b43>
[116] [CITE@en[Circular module graphs instantiate too early · Issue #2629 · whatwg/html]]
([TIME[2017-09-03 16:22:46 +09:00]])
<https://github.com/whatwg/html/issues/2629>
[147] [CITE@en[Module script errors maybe shouldn't propagate to descendant scripts so much · Issue #2630 · whatwg/html]]
([TIME[2017-09-03 16:23:13 +09:00]])
<https://github.com/whatwg/html/issues/2630>
[148] [CITE@en[Rely on the JavaScript spec to handle more module errors by domenic · Pull Request #2674 · whatwg/html]]
([TIME[2017-09-03 16:23:42 +09:00]])
<https://github.com/whatwg/html/pull/2674>
[149] [CITE@en[Editorial: refactor classic and module scripts to be more alike]]
([[domenic]]著, [TIME[2017-09-07 05:40:50 +09:00]])
<https://github.com/whatwg/html/commit/dce999aac4d9deeefa3b338dd2aeb30c17669bc8>
[140] [CITE@en[Integrate dynamic import()]]
([[domenic]]著, [TIME[2017-09-14 21:11:01 +09:00]])
<https://github.com/whatwg/html/commit/d4d1704f9c0efbeed78b885d566af17545b8b5fe>
[163] [CITE@en[Fix module script error handling, again]]
([[domenic]]著, [TIME[2017-08-31 06:25:49 +09:00]])
<https://github.com/whatwg/html/commit/165101a955652f715e551917c80ab8140429978f>
[166] [CITE@en[Fix module script error handling, again by domenic · Pull Request #2991 · whatwg/html]]
([TIME[2017-12-19 00:44:43 +09:00]])
<https://github.com/whatwg/html/pull/2991>