var, let, const


var


ES 5の前にはvarキーワードのみを使用して変数を宣言できます.
  • は、
  • を再割り当て可能である.
  • varキーワードとして宣言された変数は、繰り返し宣言できます.
  • 同じ名前の変数が宣言されている場合、変数を繰り返し宣言して値を割り当てると、宣言された変数の値が変更される可能性があります.
  • の関数レベルスキャンがあります.
  • varキーワードとして宣言された変数は、関数のコードブロック지역 스코프のみを承認する.
  • したがって,関数外部でvarキーワードとして宣言された変数は,コードブロック内で宣言してもグローバル変数となる.

    let

  • 繰り返し宣言不可
  • block-level scopeを備えています.(関数、if文、for、while文の括弧{}は領域スキャンとして認識される.varは関数レベルでのみ領域スキャンとして認識される)
  • .
  • は、
  • を再割り当て可能である.

    const


    contキーワードとして宣言された変数は、宣言と同時に初期化されます.
  • block-level scopeを備えています.
  • の元の値とオブジェクトを再割り当てする必要がない場合はconstキーを使用します.
  • 再割当不可
  • 繰り返し宣言不可
  • の状態、可読性、メンテナンスを容易にするためにconstを使用することが望ましい.
  • constに元の値を割り当てる場合:値可変値
  • オブジェクトを
  • constに割り当てる:値を変更可能
  • がんばって


    var


    varは宣言前に使用できます.
    次の例は、宣言のみがダンプされ、割り当てはダンプされていないことを示しています.
    var name;
    console.log(name); // undefined
    name = '이름';

    let


    letはHOISTINGにもなります
    Hoistingの定義は,Scope内部のどこにおいても変数宣言が最上位宣言のように表現されることである.
    しかしなぜletとconstはvarのように働かないのでしょうか?=>原因はTDZの一時的な死角です.
    console.log(name); // Reference Error
    let name = '이름';
    TDZ領域の変数は使用できません.letとconstはTDZの影響を受ける.つまり、配るまでは使えません.
    これにより、コードを予測し、潜在的なエラーを低減できます.
    TDZの正確な定義は、スキャンの開始点から初期化の開始点までの間で変数を参照できない区間を指す.
    console.log(name); // TDZ
    let name = '이름'; // 함수 선언 및 할당
    console.log(name); // 사용 가능
    ホイスティンはスコフ単位で発生した.
    let age = 20;
    function ageHandler () {
    	console.log(age); // TDZ
      	let age = 10; // 호이스팅 일으킨다
    }
    ageHandler();

    変数の生成と定義


    1.宣言フェーズ
    2.初期化フェーズ
    3.割当手順

    var


    宣言と初期化を同時に行う.このため,割当て前にコールしてもエラーが発生せず,未定義の場合が発生する.

    let


    宣言フェーズと初期化フェーズは別々に行われる.これは、呼び出し時に宣言フェーズが行われますが、初期化フェーズは実際のコードに達するとreferenceエラーが発生します.

    const


    宣言段階と分配は同時に行わなければならない.letとvarは、先に宣言してから割り当てることができます.letとvarは値を変えることができるからです.
    contと宣言するとすぐに割り当てられます.
    const name; // Uncaught syntax Error
    name = '안녕';

    スキャン


    var:関数スキャン


    関数で宣言された変数のみがゾーン変数になります.
    if文でvarとして宣言された変数はif文の外でも使用できます.しかしletとconstはブロックスキャンなので不可能です.
    const name = '이름';
    if (name === '이름') {
    	var text = '안녕';
    }
    console.log(text); // '안녕'
    varキーワードとして宣言された変数の唯一抜け出すことができない範囲は関数です.

    let,const:ブロックスキャン


    ブロックスキャンで宣言された変数は、(지역변수)コードブロック内でのみ有効であり、外部からアクセスできません.
    関数、if文、for文、try/catch、while文など.

    整理する

    호이스팅:変数を宣言および初期化すると、宣言部分が最上位に引き寄せられます.varは関数レベルスキャン、letおよびconstはブロックレベルスキャンvar:繰り返し宣言可能な再割り当て、関数レベルスキャン、宣言前に使用可能、宣言と初期化を同時に実行let:繰り返し宣言不可、再割り当て可能、ブロックレベルスキャンconst:繰り返し宣言不可、再割り当て不可、ブロックレベルスキャン
    letとconstも変数反発になりますが、実行時にコントロールが変数宣言に到達するまで一時的な死角(TDZ)に陥るため参照できません.
    変数を宣言する場合はconstがデフォルトで使用され、再割り当てが必要な場合はletが使用されます.
    constキーを使用すると、予期せぬ再割り当てを防ぐことができるので、安全です.
    -JavaScript Deep Dive