[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] 
[[空]]に
[[NormalCompletion]]
を適用した結果を返し、ここで停止します。
= [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] [VAR[評価状態]]を返します。
= [160] それ以外の場合、
== [54] [VAR[設定群]]について[[スクリプトを走らせた後の片付け]]をします。
== [63] [VAR[評価状態]]が [[normal completion]] の場合、
=== [81] [VAR[評価状態]]を返します。
== [83] それ以外の場合、
=== [106] 新しい [[Completion]]
を返します。
[FIG(list members)[ [169] [[Completion]]

: [F(ss)[型]] :
[[throw]]
: [F(ss)[値]] :
新しい [CODE[QuotaExceededErro]]
[CODE[DOMException]]
: [F(ss)[Target]] :
[[empty]]

]FIG]
]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] 
[[空]]に 
[[NormalCompletion]]
を適用した結果を返し、
ここで停止します。
= [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[設定群オブジェクト]]について[[スクリプトを走らせた後の片付け]]をします。
= [170] 
[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 のコールバック][getCurrentLocation]]、
[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実行文脈]]となります。)
= [181] 
[VAR[イベントループ]]の[[現在走っているタスク]]の[F[スクリプト評価環境設定群オブジェクト集合]]に、
[VAR[設定群]]を追加します。

]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]

-*-*-

[182] [[タスク]]は、
[DFN[[F[[RUBYB[[[スクリプト評価環境設定群オブジェクト集合]]][script evaluation environment settings object set]]]]]]を持ちます。
初期値は[[空集合]]です [SRC[[CITE[HTML Standard]]]]。

[183] 
[[スクリプトを走らせる準備]]で[[環境設定群オブジェクト]]が追加されていきます。

[184] 
[[マイクロタスク]]にも存在しますが、[[マイクロタスクキュー]]から実行されるときは使われません。
[[マイクロタスク]]が通常の[[タスク]]として実行される時には意味を持ってきます。

* 実行制限と中断

[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>

[167] [CITE@en[Proposal: self.queueMicrotask(f) · Issue #512 · whatwg/html]]
([TIME[2018-08-07 12:28:42 +09:00]])
<https://github.com/whatwg/html/issues/512>

[168] [CITE@en[Return the completion record result from running a script]]
([[mattto]]著, [TIME[2018-08-11 03:18:45 +09:00]])
<https://github.com/whatwg/html/commit/ad3dda51552aeeeea60540c7f1b513fe45b486a5>

[171] [CITE@en[Return the completion record result from running a script. by mattto · Pull Request #3888 · whatwg/html]]
([TIME[2018-08-14 23:44:44 +09:00]])
<https://github.com/whatwg/html/pull/3888>

[172] [CITE@en[Align "uncaught runtime script error" with the HTML spec · Issue #1334 · w3c/ServiceWorker]]
([TIME[2018-08-14 23:45:00 +09:00]])
<https://github.com/w3c/ServiceWorker/issues/1334>

[173] [CITE@en[Return empty on "do not run" for running a script]]
([[mattto]]著, [TIME[2018-08-15 01:31:40 +09:00]])
<https://github.com/whatwg/html/commit/b71f885ec4f6e1a074157036d3deb9f1d6a9aa77>

[174] [CITE@en[Return empty on "do not run" for running a script. by mattto · Pull Request #3907 · whatwg/html]]
([TIME[2018-08-18 23:55:02 +09:00]])
<https://github.com/whatwg/html/pull/3907>

[175] [CITE@en[Clarify "uncaught runtime script error". by mattto · Pull Request #1346 · w3c/ServiceWorker]]
([TIME[2018-08-18 23:57:08 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1346>

[176] [CITE@en[Clarify "uncaught runtime script error". (#1346)]]
([[mattto]]著, [TIME[2018-11-01 13:40:23 +09:00]])
<https://github.com/w3c/ServiceWorker/commit/595e504219f83300e2294dfa38e1e364882a0cf7>

[177] [CITE@en[Clarify "uncaught runtime script error". by mattto · Pull Request #1346 · w3c/ServiceWorker]]
([TIME[2019-05-31 13:39:49 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1346>

[178] [CITE@en[Clarify "uncaught runtime script error". by mattto · Pull Request #1346 · w3c/ServiceWorker]]
([TIME[2019-05-31 13:40:56 +09:00]])
<https://github.com/w3c/ServiceWorker/pull/1346>

[179] [CITE@en[Align "uncaught runtime script error" with the HTML spec · Issue #1334 · w3c/ServiceWorker]]
([TIME[2019-05-31 13:41:32 +09:00]])
<https://github.com/w3c/ServiceWorker/issues/1334>

[180] [CITE@en[Integrate with the Long Tasks spec]]
([[npm1]], [TIME[2018-10-23 07:23:27 +09:00]], [TIME[2021-03-25T06:08:39.000Z]])
<https://github.com/whatwg/html/commit/425a67ba81288305fce86736a0772f84c3f30eed>