var、let、constの違い


1.変数を再宣言できますvarを使用すると、変数宣言時に割り当てられた値を動的に変更できます.
var name = "Tom";
console.log(name);

var name = "Juila";
console.log(name);

>>output: "Tom"
>>output: "Juila"
しかし、letおよびconstは、変数を再宣言することはできない.
  • let
  • let name = "Tom";
    console.log(name); 
    
    let name = "Juila";
    console.log(name);
    
    >>output: Identifier 'name' has already been declared
  • const
  • const name = "Tom";
    console.log(name); 
    
    const name = "Juila";
    console.log(name);
    
    >>output: Identifier 'name' has already been declared
    2.変数を再割り当て可能letは、変数を再割り当てすることができる.
    let name = 'Tom' // output: Tom
    let name = 'Julia' // output: Uncaught SyntaxError: Identifier 'name' has already been declared
    name = 'Kevin' // output: Kevin
    逆に、constは再割り当てできません.
    let name = 'Tom' // output: Tom
    let name = 'Julia' // output: Uncaught SyntaxError: Identifier 'name' has already been declared
    name = 'Kevin' // output: Uncaught TypeError:Assignment to constant variable.
    3.変数のスキャンvarは、実質的に機能範囲を有する.letconstはblockscopeを有する.
  • var
  • var a = 1
    
    if (true) {
      var a = 5
    }
    
    console.log(a) // output: 5
    非関数の場所でaが宣言されているため、グローバル変数とみなされます.
    a変数が繰り返し宣言されるにつれて、最下位のコンソールでも出力値が5になることがわかります.
    var str = "This is String.";
    if(typeof str === 'string'){
      var result = true;
    } else {
      var result = false;
    }
    
    console.log(result);    // result : true
    関数(if文)ではなく領域スキャン(関数レベルスキャン)のみが認められるため、グローバル変数(共有)として認定される.
  • let, const
  • let a = 1
    
    if (true) {
      let a = 5
    }
    
    console.log(a) // output: 1
    letと宣言されると、if文コードブロック内に領域スキャン(ブロックレベルスキャン)があり、コンソールが撮影されると、グローバルなaが結果値として出力される.constもそうです.
    var str = "This is String.";
    
    if(typeof str === 'string'){
      const result = true;
    } else {
      const result = false;
    }
    
    console.log(result);    // result : result is not defined
    letconstは、すべてのコードブロック(ex.関数、if、for、while、try/catch文など)を領域スキャンのブロックレベルスキャンと見なす.
    4.整理
    基本的に、変数のスキャンはできるだけ縮小することをお勧めします.したがって、varキーワードに比べてletとconstキーワードを使用し、不変値(定数)の場合はletよりもconstキーワードを使用する方が安全です.
    varletconstスキャン関数レベル(幅)ブロックレベル(狭い)ブロックレベル