atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • このページの操作履歴
    • このウィキのページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
0x0b
  • 広告なしオファー
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
広告非表示(β版)
ページ一覧
0x0b
  • 広告なしオファー
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
0x0b
広告非表示 広告非表示(β)版 ページ検索 ページ検索 メニュー メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • このページの操作履歴
    • このウィキのページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 0x0b
  • js_executioncontext

0x0b

js_executioncontext

最終更新:2011年08月31日 21:15

0x0b

- view
管理者のみ編集可
実行コンテキスト
制御が ECMAScript の実行可能コードに転送される時に、制御は 実行コンテキスト に入る。アクティブな実行コンテキストは論理的にスタックを形成する。この論理的スタック上の実行コンテキストの頂点が、実行される実行コンテキストである。

定義

Function オブジェクト (Function Objects)

Function オブジェクトには 2 種類ある:
プログラム関数 は、ソーステキスト内に FunctionDeclaration で定義される。あるいは、 FunctionExpression かコンストラクタとしての組込み Function オブジェクトを使用して動的に生成される。
内部関数 は、 parseInt や Math.exp のような、言語の組込みオブジェクトである。実装は、本仕様に記述されない実装依存の内部関数を提供してもよい。これらの関数は ECMAScript 文法に記述される実行可能コードを含まない。従ってそれらは実行コンテキストのこの議論から除外される。

実行可能コードの種類

ECMAScript の実行可能コードの種類は 3 つある:
グローバルコード は ECMAScript の Program として扱われるソーステキストである。個々の Program のグローバルコードは FunctionBody 部分として解析されるソーステキストを含まない。
eval コード は組込み eval 関数に提供されるソーステキストである。より正確には、組込み eval 関数のパラメータが文字列なら、それは ECMAScript の Program として扱われる。個々の eval 呼び出しのための eval コードは、文字列パラメータのグローバルコード部分である。
関数コード は FunctionBody 部分として解析されるソーステキストである。個々の FunctionBody の関数コードは、ネストされた FunctionBody 部分として解析されるソーステキストを含まない。関数コードはまた、コンストラクタとして組込み Function オブジェクトを使用する際提供されるソーステキストもあらわす。より正確には、 Function コンストラクタに提供される最後のパラメータは文字列に変換され FunctionBody として扱われる。 Function コンストラクタにひとつ以上のパラメータが供給されれば、最後の一つを除いた残りのパラメータすべてが文字列に変換され、カンマを区切りに連結される。その結果の文字列は最後のパラメータで定義される FunctionBody のための FormalParameterList として解釈される。 Function の個々のインスタンス化のための関数コードはネストされた FunctionBody 部分として解析されるソーステキストを含まない。

変数の実体化

各実行コンテキストは 変数オブジェクト (variable object) に結び付けられている。ソーステキスト内に宣言された変数と関数は変数オブジェクトのプロパティに追加される。関数コードについては、パラメータが変数オブジェクトのプロパティに追加される。
どのオブジェクトが変数オブジェクトに使われるか、どの属性がプロパティに使われるかは、コードの型に依存する。しかし、後の振る舞いは総括的である。実行コンテキストに入ると、プロパティは次の順に変数オブジェクトに結び付けられる:
関数コードでは: FormalParameterList で定義された仮引数ごとに、変数オブジェクトにプロパティを生成する。その名前は Identifier で、属性はコード型によって決定する。パラメータ値は呼出側によって Call の引数として供給される。呼出側が仮引数より少ないパラメータ値を供給するならば、余分な仮引数は値 undefined を持つ。 2 つ以上の仮引数が同じ名前のために同じプロパティを共有する場合、該当するプロパティは、後出のパラメータに供給された値を与えられる。この後出のパラメータ値が呼出側から供給されない場合、該当するプロパティの値は undefined である。
ソーステキスト順で、コード中の各 FunctionDeclaration 毎に、変数オブジェクトにプロパティを生成する。その名前は FunctionDeclaration の Identifier で、値にはセクション 13 に記述される Function オブジェクトの生成で返される結果が設定され、属性はコードの型によって決定する。変数オブジェクトが既にこの名前のプロパティを持っている場合、その値と属性を置換する。意味論的に、このステップは FormalParameterList プロパティの生成に続かなければならない。
コード中の各 VariableDeclaration あるいは VariableDeclarationNoIn 毎に、変数オブジェクトにプロパティを生成する。その名前は VariableDeclaration または VariableDeclarationNoIn 中の Identifier で、値は undefined 、属性はコードの型により決定する。変数オブジェクトが既にこの名前のプロパティを持っている場合、プロパティの値と属性は変更されない。意味論的に、このステップは FormalParameterList と FunctionDeclaration のプロパティ生成に続かなければならない。宣言される変数が、宣言された関数や仮引数と同じ名前を持っている場合、変数宣言は特に既存のプロパティを妨害しない。

スコープ連鎖と識別子の解決

各実行コンテキストは スコープ連鎖 (scope chain) に関連付けられている。スコープ連鎖はオブジェクトのリストで、Identifier の評価の際に検索される。制御が実行コンテキストに入るとき、コード型毎にオブジェクト集合の初期値を伴うスコープ連鎖が生成され、組み込まれる。実行コンテキスト内における実行の間、実行コンテキストのスコープ連鎖は with 文(文 with文)と catch クローズ(文 try文)によってのみ影響を及ぼされる。
実行中、構文的生成規則 PrimaryExpression : Identifier は次のアルゴリズムで評価される:
スコープ連鎖内で次のオブジェクトを取得する。一つもなければ、ステップ 5ヘ。
Result(1) の HasProperty メソッドを呼び、プロパティとして Identifier を渡す。
Result(2) が true ならば、基準オブジェクトが Result(1) でプロパティ名が Identifier である Reference 型の値を返す。
ステップ 1 へ。
基準オブジェクトが null でプロパティ名が Identifier である Reference 型の値を返す。
識別子評価の結果は常に、識別子文字列と等しいメンバ名成分を持つ Reference 型の値である。

Global オブジェクト (Global Object)

制御が任意の実行コンテキストに入る前に生成される、一意的な グローバルオブジェクト(Globalオブジェクト) が存在する。最初はグローバルオブジェクトは次のプロパティを持つ:
Math, String, Date, parseInt 等のような組込みオブジェクト。これらは属性 { DontEnum } を持つ。
ホストの定義する追加プロパティ。これはグローバルオブジェクト自身を値とするプロパティを含めてよい; たとえば、HTML 文書オブジェクトモデルにおけるグローバルオブジェクトの window プロパティは、グローバルオブジェクトそれ自身である。
制御が実行コンテキストに入り、ECMAScript コードが実行されれば、グローバルオブジェクトに追加プロパティを追加しても、初期のプロパティを変更してもよい。

Activation オブジェクト (Activation Object)

関数コードによって制御が実行コンテキストに入るとき、 Activation オブジェクトと呼ばれるオブジェクトが生成され実行コンテキストに結び付けられる。 Activation オブジェクトは属性 { DontDelete } のプロパティ arguments で初期化される。このプロパティの初期値は下に述べる arguments オブジェクトである。
Activation オブジェクトは変数の実体化を目的とした変数オブジェクトとして使用される。
Activation オブジェクトは純粋に仕様のメカニズムである。 Activation オブジェクトへのアクセスは ECMAScript プログラムには不可能である。 Activation オブジェクトのメンバへのアクセスは可能だが、 Activation オブジェクト自身へのアクセスはできない。基準オブジェクトが Activation オブジェクトである Reference 値に呼出操作が適用されるとき、その呼出の this 値として null が使われる。

this

アクティブな実行コンテキストそれぞれに結び付けられる this 値がある。this 値は呼出側と実行されるコード型に依存し、制御が実行コンテキストに入るときに決定される。実行コンテキストに結び付けられる this 値は不変である。

arguments オブジェクト (Arguments Object)

関数コードによって制御が実行コンテキストに入るとき、 arguments オブジェクトが作成され次のように初期化される:
argument オブジェクトの内部 Prototype プロパティの値は、オリジナルの Object prototype オブジェクトで、 Object.prototype (セクション15.2.3.1) の初期値である。
属性 { DontEnum } のプロパティ callee を作成する。このプロパティの初期値は実行されている Function オブジェクトである。これは再帰する匿名ファンクションを許す。
属性 { DontEnum } のプロパティ length を作成する。このプロパティの初期値は呼出側から供給された実際のパラメータの数である。
0 以上 length プロパティの値未満の整数 arg それぞれについて、属性 { DontEnum } のプロパティ ToString(arg) が作成される。このプロパティの初期値は対応するパラメータの呼出側に供給される実際の値である。最初の実際のパラメータ値が arg = 0、2 番目は arg = 1, 以下同様である。arg が Function オブジェクトの仮引数の数より小さい場合、このプロパティは Activation オブジェクトの対応するプロパティとその値を共有する。このことは、このプロパティの変更が Activation オブジェクトの対応するプロパティを変更すること、そしてその逆を意味する。

実行コンテキストの開始

各関数とコンストラクタの呼出は、新しい実行コンテキストを開始する。関数がそれ自身の再帰的呼出であっても、各リターンは実行コンテキストを終了する。投げられた例外が受け取られない場合は、一つ以上の実行コンテキストを終了してよい。
制御が実行コンテキストを開始するとき、スコープ連鎖が生成・初期化され、変数の実体化が行われ、this 値が決定される。
スコープ連鎖の実体化、変数の実体化、this 値の決定は、開始するコード型に依存する。

グローバルコード (Global Code)

スコープ連鎖が作成され、グローバルオブジェクトのみの構成で初期化される。
変数の実体化が行われ、変数オブジェクトにグローバルオブジェクト、プロパティ属性 { DontDelete } が用いられる。
this 値はグローバルオブジェクトである。

Eval コード (Eval Code)

制御が eval コードの実行コンテキストを開始するとき、前のアクティブな実行コンテキストは、 呼出コンテキスト として参照され、スコープ連鎖、変数オブジェクト、 this 値の決定に使用される。呼出コンテキストがなければ、スコープ連鎖、変数の実体化、this 値の決定の初期化は、グローバルコードとして行われる。
スコープ連鎖が初期化され、呼出コンテキストのスコープ連鎖と同じオブジェクト、同じ順序になるように構成される。これは with 宣言および catch クローズによって呼出コンテキストのスコープ連鎖に追加されるオブジェクトを含む。
変数の実体化が行われ、呼出コンテキストの変数オブジェクト、プロパティ属性 { } が用られる。
this 値は呼出コンテキストの this 値と同じである。

関数コード (Function Code)

スコープ連鎖が初期化され、 Activation オブジェクトに Function オブジェクトの Scope プロパティに蓄積されたスコープ連鎖内のオブジェクトが続くように構成される。
変数の実体化が行われ、変数オブジェクトに Activation オブジェクト、プロパティ属性 { DontDelete } が用いられる。
this 値は呼出側が提供する。呼出側が提供する this 値がオブジェクトでない場合(null である場合を含む)、 this 値はグローバルオブジェクトとする。
「js_executioncontext」をウィキ内検索
LINE
シェア
Tweet
0x0b
記事メニュー
  • トップページ

  • JavaScript(ECMAscript)
  • CSS
  • SGML/HTML/XML

テスト用
  • 砂場
見本
  • 使用頻度の高い構文


メモ
_travian
_


ここを編集




延べ - 回
今日 - 回
昨日 - 回



記事メニュー2
2025-10-29 09:02:32 (Wed)

更新履歴

取得中です。



@wikiヘルプメニュー
  • @wiki助け合いコミュニティ
  • wiki(ウィキ)って何?
  • 初心者ガイド
  • ご利用ガイド
  • 良くある質問
  • プラグイン一覧
  • 編集モードの違いについて
  • 不具合や障害を見つけたら
  • 管理・設定マニュアル




ここを編集
最近更新されたページ
  • 4177日前

    トップページ
  • 5144日前

    js_ref
  • 5151日前

    js_about_08
  • 5151日前

    js_about_07
  • 5151日前

    js_about_06
  • 5151日前

    js_about_05
  • 5151日前

    js_about_04
  • 5152日前

    js_about_03
  • 5155日前

    js_about_02
  • 5155日前

    js_about_01
もっと見る
最近更新されたページ
  • 4177日前

    トップページ
  • 5144日前

    js_ref
  • 5151日前

    js_about_08
  • 5151日前

    js_about_07
  • 5151日前

    js_about_06
  • 5151日前

    js_about_05
  • 5151日前

    js_about_04
  • 5152日前

    js_about_03
  • 5155日前

    js_about_02
  • 5155日前

    js_about_01
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. 即売会迷惑行為人物まとめWiki
  2. デジタルモンスター まとめ@ ウィキ
  3. Fate/Grand Order @wiki 【FGO】
  4. Last Z: Survival Shooter @ ウィキ
  5. テレビ番組スポンサー表 @ wiki
  6. MADTOWNGTAまとめwiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. アニヲタWiki(仮)
  9. 提督たちの憂鬱 支援SSほか@ まとめウィキ
  10. MadTown GTA (Beta) まとめウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. MADTOWNGTAまとめwiki
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. ストグラ まとめ @ウィキ
  6. 検索してはいけない言葉 @ ウィキ
  7. 鬼レンチャンWiki
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  10. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MADTOWNGTAまとめwiki
  2. MadTown GTA (Beta) まとめウィキ
  3. 首都圏駅メロwiki
  4. まどドラ攻略wiki
  5. ステラソラwiki
  6. Last Z: Survival Shooter @ ウィキ
  7. シュガードール情報まとめウィキ
  8. ちいぽけ攻略
  9. ソニックレーシング クロスワールド 攻略@ ウィキ
  10. 駅のスピーカーwiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. ゲームシステムを利用した演出 - アニヲタWiki(仮)
  2. Pokémon LEGENDS Z-A - アニヲタWiki(仮)
  3. 参加者一覧 - MADTOWNGTAまとめwiki
  4. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  5. ファイナルファンタジーXVI - ゲームカタログ@Wiki ~名作からクソゲーまで~
  6. カラスバ(ポケモン) - アニヲタWiki(仮)
  7. 参加者一覧 - ストグラ まとめ @ウィキ
  8. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  9. XVI - MADTOWNGTAまとめwiki
  10. ブラックマジシャンガールのエロ動画 - イナズマイレブンの人気投票で五条さんを一位にするwiki 五条さんおめでとう
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.