let、const、varの違いと違い



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


関数のすべての宣言を、関数の有効範囲の最上位に移動します.
  • javascript関数は、実行前に関数に必要なすべての変数値を収集し、有効範囲の上部で宣言します.
  • JavaScript Parserは、関数の実行前に関数を1回巡回します.
    関数に存在する変数/関数宣言に関する情報を記憶し、実行します.
    有効範囲:関数ブロック{}内で有効
    すなわち、関数では、下部に存在するコンテンツに必要な値を上げる.
  • は実際にはコードが昇格されるのではなく、JavaScript Parser内部で昇格させることで処理される.
    実際のメモリに変化はありません.
  • コードチェック変数宣言および割当て中に宣言子のみが呼び出されます
    noDefine();
    
    function noDefine() {
      // 변수 선언 및 할당 이전에 호출 테스트
      console.log("not defined : " + name);
      var name = "ojava";
      // 변수 초기화 이후 값 확인
      console.log("defined : " + name);
    }
     
    上記のコードの結果を予測すると、最初のコンソールログで使用されたnameが宣言されないため、エラーが発生する可能性がありますが、エラーは発生せず、次のようなログが発生します.
    not defined : undefined
    defined : ojava
    ただし,この場合,変数を宣言するvarを省略すると思わぬ結果が生じるので注意する.
    noDefineという名前の関数範囲の変数を作成しようとしますが、name="ojava"として宣言すると、例外結果が返されます.
    noDefine();
    
    function noDefine() {
      console.log("not defined : " + name);
      // var name = "ojava";
      name = "ojava"; // 변수 선언 명령어 없이 name 변수에 할당함
      console.log("defined : " + name);
    }
    not defined : ojava
    defined : ojava
    エラーは発生しないだけでなく、変数を割り当てる前に割り当てられた値に戻します.
    なお、関数では、変数宣言コマンドのほか、宣言時にグローバル変数として使用されます.
    この場合、関数で宣言されていないコマンドの初期化値がグローバル変数として使用され、予期せぬ結果値が返される可能性があるため、注意が必要です.
  • JavaScriptは、ES 6に導入されたlet、const、var、let、const、function、function*、classを含むすべての宣言をサポートします.
  • これはletと宣言された変数がスコフの開始から変数の宣言まで一時的な死角地帯(Temporal Dead Zone;TDZ)に陥るためである.
  • ただし、varとして宣言された変数とは異なり、文を宣言する前にletとして宣言された変数を参照すると、参照エラーが発生します.

    今var、let、constを比較します!


    まずvarは変数宣言方式に大きな欠点がある.
        var name = 'bathingape'
        console.log(name) // bathingape
    
        var name = 'javascript'
        console.log(name) // javascript
    一度変数を宣言したにもかかわらず、出力の値がそれぞれ異なり、エラーは発生していないことがわかります.
    したがって,ES 6以降,これを補うために増加した変数宣言方式はletとconstである.
    上のコード宣言をletに変更すると、エラーが発生します!
    同様に、constが再び宣言すると、エラーが発生します!
    let name = 'bathingape'
        console.log(name) // bathingape
    
        let name = 'javascript'
        console.log(name) 
        // Uncaught SyntaxError: Identifier 'name' has already been declared

    ではletとconstの違いは何ですか?


    letは変数を再割り当てできます.でも、
    let name = 'bathingape'
    console.log(name) // bathingape
    
    let name = 'javascript'
    console.log(name) 
    // Uncaught SyntaxError: Identifier 'name' has already been declared
    
    name = 'react'
    console.log(name) //react
    constは変数を再宣言したり、変数を再割り当てしたりすることはできません.
    const name = 'bathingape'
    console.log(name) // bathingape
    
    const name = 'javascript'
    console.log(name) 
    // Uncaught SyntaxError: Identifier 'name' has already been declared
    
    name = 'react'
    console.log(name) 
    //Uncaught TypeError: Assignment to constant variable.

    では、どのような宣言がいいのでしょうか。


    何が良いのかははっきり言えませんが、場合によっては良い方法があるようです!

    変数宣言の場合はconstを使用し、再割り当てが必要な場合は限定letを使用します。


    また、オブジェクトを再割り当てすることは一般的ではありません.contを使用すると、予期せぬ再割り当てを防止できるため、より安全です.
    再配分が必要な場合は、限定害letを使用します.このとき、変数のスキャンはできるだけ狭くなります.
    再割り当てを必要としない定数とオブジェクトについてconstを使用します.