変数の海(2)


Varを放棄しましょう。


let,constの前にvarを使用します.では、varとlet、constの違いは何でしょうか.コアはvarが関数scope,let,constを有するブロックレベルのscopeである.このほか、宣言、分配、護衛などの特徴も発見できる.

基本


var

  • は、
  • を再宣言することができる
  • は、
  • を再割り当て可能である.
  • 変数出力と比較して、以降の宣言と割り当てにエラーは発生しない(ブートO)
  • .
  • は、グローバル空間
  • に記憶する.

    let

  • 再宣言不可
  • は、
  • を再割り当て可能である.
  • 号給油X
  • const

  • 再宣言不可
  • 再割当不可
  • 号給油X
  • きょうさ


    var


    ブロック内で変数を変更すると、グローバルスペース内の変数に変更されます.これはvarが関数単位スキャンを有するためである.

    let, const


    let/constは、変数の範囲をブロック単位で指定します.

    グローバルスペースを最小化する理由


    グローバルスペースは使えませんか?では、理由は何ですか.どこでも近づけるから.人は別れたと思っているが、結婚式の実行では別れない.核心は思いがけない間違いが起こるからだ.
    したがって、グローバル変数はエラー防止策として使用されません.Windows/globalは操作しません.const/letを使用すると、varがグローバルに生成するデータを削減できます.根本
    IIFE、Module、Closureでスキャンする方法があります.

    グローバルスペース?


    グローバルスペースは通常、最上位レベルを意味します.Windowsまたはglobalは、ブラウザ環境ではwindow、ノード環境ではglobalです.

    どうして世界を侵害できないの?


    JSは書類を分けられない.
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script src="./global.js"></script>
      <script src="./global2.js"></script>
    </body>
    </html>
    // global
    var global = 'global';
    
    console.log(console.log('global', global));
    // global2
    console.log('global2', global);
    

    また、グローバルオブジェクトに登録されている機能と同じ名前の変数を宣言/割り当てた場合、この機能は上書きの問題に直面します.ブラウザコンソールでエラーが発生しますが、ノード環境ではエラーは発生しません.
    // global
    var global = 'global';
    
    console.log(console.log('global', global));
    
    var setTimeout = 'setTimeout';
    
    // global2
    console.log('global2', global);
    
    setTimeout(() => {
      console.log(1);
    }, 1000);
    

    がんばって


    護衛は運行時に宣言と配分が分かれている.ランタイムタイミングとは、コードランタイムを意味します.Hoastingは、変数が正しく初期化されていない場合、未定義の最上位レベルに昇格できることを意味します.特にvarを使用する場合に発生する可能性があります.
    var globa = 0;
    function outer() {
      console.log(global); // undeinfd > 선언과 할당이 분리된 상태
      var global = 5;
    
      function inner() {
        var global = 10;
        console.log(global); // 10
      }
    
      inner();
    
      global = 1;
      
      console.log(global); // 1
    }
    
    outer();
    変数だけでなく、関数もハイライトされます.
    console.log(sum()); // 3
    
    function sum() {
      return 1 + 2;
    }
    解決策の1つは、関数式を使用することです.
    console.log(sum()); // Error
    
    const sum = function() {
      return 1 + 2;
    }
    ブートは、実行時に宣言を最上位レベルに昇格させることを意味します.問題は、コードの作成時に予測不可能な実行結果が発生する可能性があることです.これを避けるためにvarを使うべきではありません.また、関数もハイライトされるので、関数式でハイライトを防ぐことができます.
    let/cont宣言変数はエスケープされないものではありません.スキャンに入ると、変数が作成され、TDZ(Temporal Dead Zone)が生成されますが、コード実行が変数の実際の位置に達するまでアクセスできません.let/cont変数が宣言されると、制御フローはTDZから離れ、変数が使用可能になります.

    TDZ(Temporal Dead Zone)


    TDZは宣言前に変数へのアクセスを禁止します.

    ソース

  • https://www.udemy.com/course/clean-code-js/learn/lecture/28913564#content
  • https://medium.com/korbit-engineering/let%EA%B3%BC-const%EB%8A%94-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-%EB%90%A0%EA%B9%8C-72fcf2fac365
  • https://ui.toast.com/weekly-pick/ko_20191014