1.var

var声明的范围是函数作用域
使用此关键字声明的变量会自动提升到函数作用域顶部(即不会报变量未定义错误),例如:

    <script>
        console.log(a);
        var a = 10;
    </script>

2.let

let声明的范围是块作用域
使用此关键字声明的变量不会自动提升到块作用域顶部(即如果使用前未定义,会报错),例如:

    <script>
        console.log(a);
        let a = 10;
    </script>

3.const

const声明与let基本相同,但是在声明变量的时候必须初始化变量,并且不可修改,例如:

        const a=10;
        a=20;


特别注意:当const声明的是一个对象时,修改对象内部的属性是可以的

区别

1、let在全局作用域中声明的变量不会编程window对象的属性,var声明的会,例如:

    <script>
        let a=10;
        var b=10;
        console.log(window.a);
        console.log(window.b);
    </script>


2、let不可以在同一个作用域内声明相同名称的变量,var可以

声明风格推荐

不使用var,在变量不需要修改时const优先,let次之,只有需要修改变量的时候,使用let