var、let、const、hoisting


var、let、constの違い


var:関数スキャン、Oの再宣言
let:ブロックスキャン、X再宣言、O再割り当て
const:ブロックスキャン、Xの再宣言、Xの再割り当て

varの欠点

    var name = '윤정'
    console.log(name) // 윤정

    var name = '엘리나'
    console.log(name) // 엘리나
柔軟な変数宣言が可能です.
同じ変数を再宣言してもエラーは発生しません.

これはなぜ欠点なのか。

  • コードが長ければ長いほどvar変数がどのように使用されているかを理解することは難しくなります.
  • で変更できない値が変更される可能性があります.
  • 号給油時、宣言は有効範囲の最上位に引き上げられた.
  • let,constの登場


    varの欠点を補うために、ES 6の後に追加された変数宣言方式
    letとconst.
  • letは再割り当て可能です.
  • constは再割り当てできません.
  • letは、値を宣言し、後で割り当てることができる.
  • constは、宣言と同時に値を割り当てる必要があります.
  • let name = "윤정"
    let name = "에러발생" // SyntaxError
    name = "엘리나"
    console.log(name) // 엘리나
    const name = "윤정"
    const name = "에러발생1" // SyntaxError
    name = "에러발생2" // TypeError

    ハウスティンとは何ですか。


    JavaScriptでは、いわゆる吊り上げ(hilling).
    これは、変数と関数のメモリ領域を宣言する前に、予め割り当てられていることを意味します.
    varとして宣言された変数については、呼び出し時にundefinedに初期化します.
    逆にletとconstとして宣言された変数については、エスケープ時に
    変数を初期化しません.
    シースを解釈する際、主に「変数の宣言と初期化を分離した後、
    通常は「コードの最上位にのみ宣言」です.
    したがって、変数を定義するコードよりも早く使用される可能性があります.
    ただし、宣言と初期化を同時に実行すると、
    変数を初期化するには、宣言コードを実行する必要があります.

    ホストの相手は誰ですか?


    宣言は護衛大賞!
  • var変数宣言
  • var関数宣言
  • JavaScriptは、ES 6に導入されたlet、const、var、let、const、function、function*、classを含むすべての宣言をサポートします.
  • 優先度


    変数の宣言>関数の宣言>変数の割当て

    TDZ(Temporal Dead Zone)


    var宣言とは異なりletとして宣言された変数
    宣言の前に参照すると、参照エラーが発生します.
    なぜなら、letと宣言された変数はscopeの開始から変数の宣言まで
    彼らは一時的な死角地帯に陥るからだ.letと宣言された変数は、宣言フェーズと初期化フェーズとが別々に行われる.
    // 스코프의 선두에서 선언 단계가 실행된다.
    // 아직 변수가 초기화(메모리 공간 확보와 undefined로 초기화)되지 않았다.
    // 따라서 변수 선언문 이전에 변수를 참조할 수 없다.
    
    console.log(foo); // ReferenceError: foo is not defined
    
    let foo; // 변수 선언문에서 초기화 단계가 실행된다.
    console.log(foo); // undefined
    
    foo = 1; // 할당문에서 할당 단계가 실행된다.
    console.log(foo); // 1