javascriptはコンテキスト、変数オブジェクトのインスタンス分析を実行します。


本論文の実例は、javascriptがコンテキスト、変数オブジェクトを実行することを述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
突然、2010年の古い文章を見ましたが、作者は章の形式でECMA-262-3の一部を紹介してくれました。内容は短くて精悍で、文风はまっすぐで、厳格で、読み终わるのは心肠よくて、醍醐味の灌顶の感があって、强烈に推荐します!
原文のリンク:ここです
翻訳したいですが、もう作っている人がいます。ここです。本当に不遇な時に生まれた,何と残念なことか!
メモをして、心を慰めてください。
実行コンテキストExecution Contect
コントローラがECMAScriptの実行可能なコードに変換されるたびに、実行可能なコンテキストが作成され、入力されます。
短い文章ですが、豊富な内容が含まれています。
  • コントローラ:jsエンジン
  • 変換:実行可能コードの一部から別のセグメント実行可能コード
  • へジャンプ
  • 実行可能コード:グローバルコード、関数コード、evalコード(それぞれ3つの作用領域に対応)
  • 実行文脈:抽象的概念であり、ECMA-622標準はこの概念を用いて実行可能コード(executable code)概念と区別する

  • 実行コンテキストは論理的にスタックを構成します。スタックの底部は常にグローバルコンテキストであり、スタックの上部は現在/活動の実行コンテキストである。スタックは、ECタイプの変数(various kingds of EC)を押し入れたり、イジェクトしたりしながら修正されます。
    例えば、コンテキストスタックの実行をシミュレートするための配列を定義することができる。
    
    ECStack = [
     globalContext,
     <foo> functionContext
    ]
    
    変数オブジェクトVarable Object
    変数オブジェクト(VO)は、コンテキストを実行する属性として存在し、下記の内容を保存します。
  • すべての変数ステートメント(var、Varable Declaration)
  • VOの属性の一つは、変数名とundefined値からなる。変数名が宣言された形式のパラメータや関数と同じであれば、変数宣言は既に存在しているこれらの属性に干渉しません。
  • 関数宣言(FuntionDeclaration、略してFDという)
  • VOの属性は、関数オブジェクトの名前と値からなります。変数オブジェクトに同じ名前の属性が既に存在する場合、この属性は完全に置換されます。
  • および関数の参照
  • VOの属性の一つであり、この属性は形式パラメータの名称と値からなる。転送の実際のパラメータに対応していない場合、この属性は形式パラメータの名称とundefined値から構成される。
  • 
    VO = {
      // context data (var, FD, function arguments)
     }
    
    変数または関数を宣言すると同時に変数の名前と値を使ってVOに新しい属性を作成しました。
    たとえば:
    
    var m = 30;
    function test(a,b) {
     var c = 20
     function d() {}
     var e = function _e() {};
    }
    test(10)
    
    「test」関数のコンテキストに入ると、AOは次のようになります。
    
    AO(test) = {
     a: 10,
     b: undefined,
     c: undefined,
     d: <reference to FunctionDeclaration "d">
     e: undefined
    };
    
    testが最後まで実行された場合、現在のコンテキストスタックに対応します。
    
    ECStack = [
     globalContext: {
      VO: {
       m: 30,
       test: 
      }
     },
     test functionContext: {
      VO: {
       a: 10,
       b: undefined,
       c: 20,
       d: <reference to FunctionDeclaration "d">,
       e: <reference to FunctionDeclaration "_e">
      }
     }
    ]
    
    変数について
    通常、様々な文章やJavaScriptに関する書籍は、「varキーワード(グローバルコンテキストで)を使っても、varキーワードを使わない(どこでも)変数を宣言することができる」と主張しています。これは絶対デマです。いつでも、変数はvarキーワードを使うことによってしか宣言できません。
    次の例を通して具体的な違いを見てみましょう。
    
    alert(a); // undefined
    alert(b); // "b" is not defined
     
    b = 10;
    var a = 20;
    
    すべての根源は依然としてVOとその修正段階(コンテキスト段階に入るとコード段階を実行する)である:
    
    VO = {
     a: undefined
    };
    
    私たちは、「b」は変数ではないので、この段階では「b」はまったくなく、「b」は実行コード段階だけで出現すると見られています。
    例コードを変えましょう。
    
    alert(a); // undefined, we know why
     
    b = 10;
    alert(b); // 10, created at code execution
     
    var a = 20;
    alert(a); // 20, modified at code execution
    
    変数については、もう一つ重要な知識があります。変数には簡単な属性に対して、変数には特性があります。
    
    a = 10;
    alert(window.a); // 10
     
    alert(delete a); // true
     
    alert(window.a); // undefined
     
    var b = 20;
    alert(window.b); // 20
     
    alert(delete b); // false
     
    alert(window.b); // still 20
    
    2018-8-2-実行コンテキスト、変数オブジェクトを再参照
    興味のある友達はオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます。http://tools.jb51.net/code/HtmlJsRun上記コードの運行効果をテストします。
    もっと多くのJavaScriptに関する内容は当駅のテーマを調べられます。「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScriptはアルゴリズムと技術の総括を遍歴します。」及び「JavaScript数学演算の使い方のまとめ
    本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。