<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2014-04-03 03:44:44 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.whatwg.org/specs/web-apps/current-work/#calling-scripts">http://www.whatwg.org/specs/web-apps/current-work/#calling-scripts</anchor-external></li></ul></refs></section><section><h1>演算</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コールバックを走らせる準備</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">約束コールバックを実行</anchor>で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript実行文脈</anchor>が上に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor> されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コールバックを走らせた後の片付け</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">約束コールバックを実行</anchor>で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript実行文脈</anchor>が削除されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループのスピン</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スタック</anchor>全体が複製されたり、
空にされたり、
複製した状態に戻されたりします。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントハンドラー</anchor>も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor> や削除を行います。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">走っているスクリプトの中断</anchor>で空にされます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コールバックを走らせた後の片付け</anchor>や
<code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">script</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了タグ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文解析器</anchor>の処理で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スタック</anchor>が空かどうかが検査されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">新しいJavaScript realmの作成</anchor>でも操作されます。</p></section><section><h1>歴史</h1><section><h1>スクリプト設定群オブジェクトのスタック</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現職スクリプト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト設定群オブジェクト</anchor>として再編され、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト設定群オブジェクトのスタック</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML Standard</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>上の概念として導入されました。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境設定群オブジェクト</anchor>の歴史の項も参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関連する類似起源閲覧文脈の単位</anchor>ごとに1つ、
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>スクリプト設定群オブジェクトのスタック</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">stack of script settings objects</rt></rubyb></dfn>があります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;39</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web IDL</anchor> では<dfn xmlns="http://www.w3.org/1999/xhtml"><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現職スクリプト群のスタック<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">stack of incumbent scripts</rt></rubyb></dfn>となっています。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スタック</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境設定群オブジェクト</anchor>を追加 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor>) したり削除 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pop</anchor>)
したりできるものです。この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スタック</anchor>は、初期状態では空でなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;39</anchor-internal></src>。
このスタックに含まれる各項目 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境設定群オブジェクト</anchor>) には、
「<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>候補入口設定群オブジェクト</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">candidate entry settings object</rt></rubyb>」
というフラグをつけることができます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;39</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コード入口点に飛ぶ</anchor>手順では、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> コードの実行の直前に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スタック</anchor>に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor>
され、直後に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pop</anchor> されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コールバック関数の呼び出し</anchor>では、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関数</anchor>の呼び出しの直前に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現職スクリプトのスタック</anchor>に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor>
され、直後に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pop</anchor> されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> 最も直近に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor> されたものを、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現職設定群オブジェクト</anchor>といいます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> 最も直近に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">push</anchor> された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">候補入口設定群オブジェクト</anchor>フラグ付きのものを、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">入口設定群オブジェクト</anchor>といいます。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[61]</anchor-end> 用法は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現職設定群オブジェクト</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">入口設定群オブジェクト</anchor>を参照。</comment-p></section><section><h1>実行文脈スタック</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="en">Rewrite script execution on top of ES · whatwg/html@4891d18</cite> (<time>2015-12-22 22:10:28 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d">https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <cite xml:lang="en">Merge pull request #113 from domenic/modernize-invoke</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bzbarsky</anchor>著, <time>2016-05-21 05:55:00 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/heycam/webidl/commit/09c011d8de1077fe5991ceded97838650e376f6c">https://github.com/heycam/webidl/commit/09c011d8de1077fe5991ceded97838650e376f6c</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <cite xml:lang="en">Pop execution context off the stack after InitializeHostDefinedRealm · Issue #3784 · whatwg/html</cite>
(<time>2018-07-30 17:45:04 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/issues/3784">https://github.com/whatwg/html/issues/3784</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">Fix calls to InitializeHostDefinedRealm by TimothyGu · Pull Request #3838 · whatwg/html</cite>
(<time>2018-07-30 17:45:40 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/pull/3838">https://github.com/whatwg/html/pull/3838</anchor-external></p></section></section></body></html>