本当の理解var,let,const

12058 ワード

本文はloving-catのブログに転載して、原文のリンク:https://blog.csdn.net/weixin_42878211/article/details/105325942
jsには変数を宣言する3つの方法var let constが存在するが,それらの違いの多くは区別できない.

var

  • varは関数役割ドメインのみであり、ブロック役割ドメインはなく、グローバル/ローカル変数(この関数でのみ有効)
  • を宣言できます.
  • varで定義された変数は関数間でアクセスできませんが、ブロック間でアクセスできます.
  • varで定義された変数は初期化しないとundefinedが出力されますが、
  • はエラーが発生しません.
  • は、定義を繰り返すことができ、後に定義されたものは、先に定義された
  • を上書きする.
    var aaa;
    console.log(aaa);   // undefined, 
    //-----------------------------------------
    var a = 1;   // 
    console.log(" a:"+a);    // a: 1
    
    function A(){
        a=2;
        console.log(" a:"+a);  // a: 2
        
    }
    A();
    console.log(" A ,a A :"+a);   // A ,a A :2
    //---------------------------------------------
    var b=1;
    var b=2;
    console.log(b);  //2, 
    

    let

  • letはブロックレベルの役割ドメインであり、関数内部でlet定義を用いると、関数外部に影響を及ぼさない
  • .
  • letで定義された変数は、ブロックの役割ドメインでのみアクセスでき、ブロック間ではアクセスできません.さらに、関数間では
  • にアクセスできません.
  • 変数宣言を繰り上げることはできません.そうしないと、
  • とエラーが発生します.
  • 定義を繰り返すことはできません.そうしないと、
  • とエラーが発生します.
    let a =1;
    console.log(" a:"+a); // 1
    function A(){
        let a = 2;
        console.log(" a:"+a);  //2
    }
    A();
    console.log("A() ,let a "+a);  //1   
    //---2-----
    var b=1;
    {
        let b=2;
        console.log(b);  //  2
    }
    console.log(b);   //1
    
    //---3------
    console.log(aaa);
    let aaa=1;   
    // , 
    //----4-------
    let p = 1;
    let p = 2;
    console.log(p);  // , 
    

    forループにタイマーが入っている場合は**varとlet**の使用に注意
    for(var i = 0;i<5;i++){
        setTimeout(function(){
            console.log(i)
        },500)
    }
    // 5 5 5 5 5 , var ,for 5  i 5, , i 5
    for(let i = 0;i<5;i++){
        setTimeout(function(){
            console.log(i)
        },500)
    }
    // 0 1 2 3 4, let , , i 
    

    const

  • constで定義する変数は変更できず、初期化
  • を行う必要がある.
  • constは一般的に定数を宣言するために使用され、宣言された定数は変更できません(読み取り専用属性).したがって、宣言と同時に
  • を割り当てる必要があります.
  • constもブロックレベルの役割ドメインであり、letと同様に、ブロックの役割ドメインにのみアクセスでき、一時的なデッドゾーンが存在し、変数宣言の早期は存在せず、
  • の繰り返し定義は許されない.
    const a =1;   // 
    console.log(a--) // 
    console.log(a-1) //  0
    const b;   // 
    //-----------------
    const c=1;
    const c=1;
    // 
    let a;
    console.log(a)  //undefinde
    a = 2;
    a = 3;
    console.log(a) //3 
    //let , , 
    

    constで定義された定数は変更できません.演算子を使用するときは、++、--いずれもできません.1つの時間は自己増加し、1つの時間は自己減少し、自身は変化します.