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

3813 ワード

本論文の実例は、javascriptがコンテキスト、変数オブジェクトを実行することを述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
突然、2010年の古い文章を見ました.作者は章の形式でECMA-262-3の一部の内容を紹介してくれました.主に文脈、変数の対象、作用領域、thisなどの言語の細部に関連しています.内容は短くて精悍で、文风はまっすぐで、厳格で、読み终わるのは心肠よくて、醍醐味の灌顶の感があって、强烈に推荐します!
リンク:ここ
翻訳したいのですが、もう作っている人がいました.ここです.本当に不遇な時に生まれた,何と残念なことか!
メモをして、心を慰めてください.
実行コンテキストExecution Contect
コントローラがECMAScriptの実行可能なコードに変換されるたびに、実行可能なコンテキストが作成され、入力されます.
短い文章ですが、豊富な内容が含まれています.
  • コントローラ:jsエンジン
  • 変換:実行可能コードから別のセグメント実行可能コード
  • へジャンプ
  • 実行可能コード:グローバルコード、関数コード、evalコード(それぞれ3つの作用領域に対応)
  • 実行文脈:抽象的な概念であり、ECMA-622標準はこの概念を用いて実行可能コード(executable code)概念と区別する.
    実行コンテキストは論理的にスタックを構成します.スタックの底部は常にグローバルコンテキストであり、スタックの上部は現在/活動の実行コンテキストである.スタックは、ECタイプの変数(various kingds of EC)を押し入れたり、イジェクトしたりしながら修正されます.
    例えば、コンテキストスタックの実行をシミュレートするための配列を定義することができる.
    
    ECStack = [
     globalContext,
      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: 
     e: undefined
    };
    
    testが最後まで実行された場合、現在のコンテキストスタックに対応します.
    
    ECStack = [
     globalContext: {
      VO: {
       m: 30,
       test: 
      }
     },
     test functionContext: {
      VO: {
       a: 10,
       b: undefined,
       c: 20,
       d: ,
       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プログラムの設計に役に立ちます.