let、var、const之间的区别

let、var、const之间的区别

let是es6的新语法,用来局部变量和 var类似但是 let只在代码块里有效,也就是块作用域

变量提升 是什么意思这里很多小伙伴会理解错

var a = 10;
    func();
    function func(){
    console.log(a);  //这里输出 undifined 
    var a = 10;
    console.log(a);   // a=0
}

很奇怪这里为什么是 undifined 这就是变量提升

上面的代码等价于

var的变量提升就是会先把var定义的变量提到代码最前进行声明,执行到指定指定代码再进行赋值

var a = 10;
        func();
        function func(){
            var a ;   
            console.log(a);  //这里输出 undifined
            a = 10;
            console.log(a);   // a=0
        }

并且要注意 {} 无法限制var

{
    var a = 10;
}
console.log(a);  //a=10
{
    let b = 10;
}
console.log(b); //Uncaught ReferenceError: b is not defined

let 和 var区别有四点

1.let有暂时性死区(就是在声明变量前无法使用)

  1. let没有变量提升

  2. let不能重复声明

  3. let有更小的作用域

  4. 声明全局变量

    function varTest() {
    var a = 1;
    
    {
    var a = 2; // 函数块中,同一个变量
    console.log(a); // 2
    }
    
    console.log(a); // 2
    }
    
    function letTest() {
    let a = 1;
    
    {
    let a = 2; // 代码块中,新的变量
    console.log(a); // 2
    }
    
    console.log(a); // 1
    }
    
    

const和let的区别

相同点:

​ const 和let都是块级作用域

不同点:

​ let 声明的变量可以改变 const声明的变量不能改变(这里注意const是不可改变是指地址不可改变)

​ const 声明时必须赋值

cosnt a;报错 Uncaught SyntaxError: Missing initializer in const declaration
const obj = {
    person:'zhangsan',
    age:17
}
console.log(obj);
obj.age=20;
console.log(obj);

当const赋值对象的时候是可以进行修改的

image.png
const obj = {}
        obj.test = '123'; 
        console.log(obj); //{test:123}
        const arr = [];
        arr.push('test')
        console.log(arr);// array(1)
        
        obj = {}; //报错
        arr= [''] //报错

//{test:123}
const arr = [];
arr.push('test')
console.log(arr);// array(1)

    obj = {}; //报错
    arr= [''] //报错

你可能感兴趣的:(let、var、const之间的区别)