スコープとクロージャ(A)

スコープとクロージャ(A)

まず、どのような範囲ですか?

  1、概念:変数を格納するためのルールの良いセットを設計し、その後、あなたは簡単にこれらの変数を見つけることができます。(そして、この値は、アクセスして修正することができます。)

  図2に示すように、従来のプロセスコンパイル言語:実行前にプログラムのソースコードは、次の3つのステップを経る、「コンパイル」と呼ばれます。

   (1)単語/字句解析。(*このプロセスは、ストリング(プログラミング言語)意味のあるコードブロックに対して、コードブロックと呼ばれる字句単位に分解文字で構成されます。)

      例:VaRのA = 2; //は、VARに分解され、、=、2、;これらの語句単位。(スペースか字句単位としてではなく、言語におけるその重要性に応じて)。

   (2)解析/構文解析。

   (3)符号の生成。

      コンセプト:実行可能コードへのASTは、コード生成と呼ばれています。(すなわち、VARのA = 2であり、ASTは、変数を作成するために、機械命令のセットに変換され、*の値は、媒体に格納されています。)

      任意のJavaScriptコードは実行前にコンパイルする必要があります

  3、の範囲を理解します

    (1)VaRのA = 2;処理された3員

      エンジン:全体のJavaScriptプログラムを最初から最後までコンパイルと実行のプロセスを担当します。

      コンパイラ:構文解析とコード生成を担当します。

      範囲:収集およびすべての生命からなる識別子(変数)によってクエリの一連を維持し、現在これらの識別子へのアクセスを実行するコードを決定する非常に厳格なルールのセットを実装するための責任。

    (2)コンパイルプロセス。

      まず、VaRのAに遭遇し、コンパイラは、スコープが同じスコープの集合体で、その名前の変数が存在しているかどうかを尋ねます。その場合、コンパイラは文を無視してコンパイルされ続け、そうでない場合、それは現在のスコープを聞いてきます

         フィールドには、変数の寿命を設定して、命名されました。

      この割り当て;第二に、コンパイラは、エンジンを実行するために必要なコード、= 2を処理するためのバックアップ・コードを生成します。コレクションの現在のスコープと呼ばれる変数がある場合はまず、スコープエンジンが実行されて訪問します。その場合、鉛

         エンジンは、この変数を使用します。ない場合、エンジンは、変数を探していきます。(見つけることができない、それは例外がスローされます。)

    変数はLSHクエリの割り当ての左側に表示された場合、即ち、右に表示される;(3)のエンジンのために、右のクエリ(RHS、割当元操作)(LSH、割り当て操作をターゲット)左照会サイドRHSは、問い合わせを行ったとき。

       RHSは、「一定の値を取得」、LHSは変数コンテナ自体、およびその割り当てを見つけようとして理解しました。

       例えばRHS:にconsole.log(a)は、本明細書で使用される、割り当てなし、唯一の値を見つけること、およびにconsole.logを渡します(..)

       LHSの例:A = 2;ちょうどターゲット= 2この割り当てを見つけようとし、現在の値を気にしないでください。

 

        例:関数foo(A){

            console.log(A)。

          }

          FOO(2)。

          これらのうち、クエリの左側が、また、お問い合わせの権利があります。暗黙の変換、A = 2です。

  4、ネストされたスコープ

       、そしてものを見つけるまで継続しない場合は、現在の執行役からエンジンを始動するための変数を検索します。グローバルスコープは、見つけるかどうか、停止しますとき。どこでも、すべてのネストされたスコープが必要とされるよりも少ない発見される(RHSクエリ

       可変エンジンは、ReferenceError例外がスローされます。場合)「ではない厳密モードで、クエリの左側には、その変数を見つけるには、変数を作成します。」(厳密またはグローバル変数を作成する暗黙の)自動モードを禁止し、厳密モード

       基準値がnullまたは未定義のタイプである場合、および例外TypeError;にReferenceError下でも例外をスローします。

第二に、レキシカルスコープ

    継続するには。

  

おすすめ

転載: www.cnblogs.com/yaosusu/p/11407737.html