[CS]Scope(スキャン)Day-15


コンピュータエンジニアリングではScopeは「範囲」を表します.正確には、「変数の有効範囲」として使用されます.
letは、contの正しい使い方とアドバイスを理解するために文章を書きます.
Scopeを学ぶ理由は
  • オーバーラップ規則
  • ブロック作用域
  • 全局スキャンと領域スキャン
  • グローバル変数と地域変数の間の優先度
  • let,const,varの差
  • グローバルオブジェクト
  • について

    Scope変数の有効範囲について

    let username = 'kimcoding';
    if (username) {
      let message = `Hello, ${username}!`;
      console.log(message); // ?
    }
    
    console.log(message); // ?
    let messageは現在if(){}で宣言されています.そのため、同じ側から近づくことはできません.
    逆にfunction(){}は、同じ側にある変数にアクセスできます.
    次の例で判断できます.
    ex)
    let greeting = 'Hello';
    
    function greetSomeone(){
        let firstName = 'KJ';
        return greeting + ' ' + firstName;
    }
    
    console.log(greetSomeone()); // Hello KJ
    // console.log(firstName); // 접근 불가능
    変数にアクセスできるブロックの範囲があります.この範囲をScope Scopeと呼びます.
  • に示すように、サイドミラーで宣言された変数は、内側ミラーで使用することができる.
  • ですが、内部宣言された変数は同じページでは使用できません.
  • グローバルスキャン


    最も似た方向のスキャンです.どこでも利用できます.

    ゾーンスキャン


    グローバル範囲以外のすべての範囲を領域範囲と呼びます.△一番奥のものを地域眼鏡とは絶対に言わない.

    ゾーン変数は、グローバル変数よりも優先されます.
    let name = "KJ"; // 전역 변수
    
    function showName(){
        let name = "SJ"; // 지역 변수
        console.log(name);
    }
    
    console.log(name); // KJ
    showName(); // SJ
    console.log(name); // KJ
    showName()がSJを出力するのは、領域変数の優先度がグローバル変数より高いためです.変数名が同じであるため,同じ辺の変数が内側変数によって隠される現象を変数shadowingと呼ぶ.(影)

    注意事項

    let name = "KJ"; // 전역 변수
    
    function showName(){
        name = "SJ"; // let 이 없는 상태에서!!!
        console.log(name);
    }
    
    console.log(name); // KJ
    showName(); // SJ
    console.log(name); // SJ
    showName()関数は、実行前にグローバル変数を読み込みます.ただし、letがない場合、nameに「SJ」が含まれて実行されると、nameのグローバル変数はshowName()関数によって「SJ」に変更されます.したがって、3番目の出力も「SJ」である.

    Scopeのタイプ(let,const,var)


    Scopeには2つのタイプがあります.
  • ブロックscope:カッコベースの範囲ブロックスキャン(矢印関数はブロックスキャン).
  • 関数scope:関数キーワードを含む関数宣言と関数式のscope.
  • 注意事項


    矢印関数はブロックスキャンに含まれます.(矢印関数は関数スキャンではありません.)
    最近letを使用する回数はvarより多い.(これは、変数宣言によってエラーが発生する可能性があるためです.)
    varバグについて説明しましょう.
    var name = "KJ"
    var name = "SJ"
    console.log(name);
    // 재선언을 해도 에러가 발생하지 않습니다. 코드가 적을 때 문제가 없지만 길어질 경우 큰 문제를 발생시킬 수 있습니다.
    値が変わらない定数を定義するためのconst
    定数を定義するときにconstを使用します.constの場合、再割り当てはできません.したがって、constに値を再割り当てすると、タイプエラーが発生します.constを使用して、予期せぬ値の変更を防止します.

    変数宣言の注意事項


    グローバル変数に過剰な変数を宣言しないでください.
    アクセス可能なグローバル変数はどこでも便利ですが、予期せぬ変更が発生する可能性があるので注意してください.

  • var変数を使用すると、再宣言でエラーは発生しません.特にvarをグローバル変数として使用すると、大きな問題が発生する可能性があります.

  • 宣言なしに変数を割り当てないでください.宣言なしに変数を割り当てると、varとして宣言されたグローバル変数に変更されます.