Scope


JavaScriptのコアメカニズムScopeを理解します.
コード定義時のコンテキスト、変数の論理空間と有効範囲を格納します.Scope범위という辞書の意味を持つ単語です.
JavaScriptでは、Scopeは변수의 유효범위を表します.
  • 変数を生成する空間
  • 変数の有効範囲
  • 現在実行中のコンテキスト
  • 種類


    スコフの種類を整理してください.

    ぜんきょくけい


    これは、アプリケーションが実行されるとすぐに作成されるスペースです.
    どこからでも近づくことができます.
    どこでどのように修正して汚すか分からないので、変数値をグローバルスキャンに登録/保存しないでください.constキーワードを使用して値を変更できない場合は、使用しても大丈夫ですが、変数名の重複が発生する可能性があるので、どうしても使用しないほうがいいです.
    // 전역스코프 생성
    var a = 0; // 전역스코프에 저장

    ゾーンスキャン


    これらは特定の領域を持つカメラです.

    かんすうそういん


    関数によって生成されるスキャンプログラムは、関数の実行時に生成されます.
    関数ドメインを基準にします.
    function fn() {
      var a = 2; // fn 함수스코프에 저장
    }
    
    fn2() // fn 함수스코프 생성

    ブロックミラー

    {}内の領域を「ブロック」と呼び、ブロック領域を基準としたスキャンである.
    ブロック内のコード実行時に生成されます.
    ブロック内では、let/constキーワードによって宣言された変数がブロックスキャン内で生成される.
    ES 6構文がサポートされている環境でのみ使用できます.
    {
      // 블록스코프 생성
      let a = 10; // 블록스코프에 저장
      const b = 20; // 블록스코프에 저장
      var c = 30; // 전역스코프에 저장
    }

    特長


    スコフにはいくつかの特徴がある.

    スキャンの定義と作成/削除


    JavaScriptのスキャンポイントで定義されるポイントと生成されるポイントは異なります.
    関数スケールは、関数宣言時に定義されます.
    関数スキャンは、関数が呼び出された(実行された)ときに生成されます.
    関数スキャンは、コードの実行が終了すると消えます.
    var x = 10
    
    function fn1() {
      var x = 20;
      fn2();
    }
    
    function fn2() {
      console.log(x);
    }
    
    fn1(); // 10
    fn2のブモクフはf1のスコフのはずですが、なぜ全駅スコフの10が撮れたのでしょうか?
    なぜなら、fn2のスケールは、fn2が発表されたときに定義されたからである.fn2関数はグローバル空間で定義(宣言)されるため、グローバルscopeはブールモスクワフとなる.
    このように宣言の過程で定義されたスタンダードは렉시컬 스코프と呼ばれている.
    逆に、実行時に定義されるスキャンは동적 스코프と呼ばれます.

    スキャンオーバーラップ


    顕微鏡は重ねることができる.(スキャンオーバーラップ)
    ザックスコフはブモスコフに近づくことができて、その駅は不可能です.
    参照する変数が自分のscopeに存在しない場合はboomoscopeに登って変数の値を探します.(スコプチェニン)
    var a = 1;
    
    function fn() {
      var b = 2;
    
      {
        const c = 3;
        console.log(a); // 1
        console.log(b); // 2
        console.log(c); // 3
      }
    
      console.log(a) // 1
      console.log(b) // 2
      // console.log(c) // ReferenceError: c is not defined
    }
    
    fn();
    
    
    console.log(a); // 1
    // console.log(b); // ReferenceError: b is not defined
    // console.log(c); // ReferenceError: c is not defined
    

    リファレンス


    https://developer.mozilla.org/ko/docs/Glossary/Scope
    https://poiemaweb.com/js-scope