【ES6】var let和const的区别;

1.var存在变量提升且声明的变量会挂载在window上,let和const不存在变量提升;

console.log(c);
    var c = 'c';//undefined(会进行c的提前解析,再执行。var默认为undefined,只有赋值才会变成对应的值);
    let c = 'c';//let不存在变量提升,不会进行域解析;
var a = 100;
    console.log(a,window.a);//100,100
    let a=100;
    console.log(a,window.a);//100 undefined
    const a =100;
    console.log(a,window.a);//100 undefined

2.同一作用域下能重复定义同一个名称

var d = 1;
    var d =100;
    console.log(d);//100
    let e = 1;
    let e = 100;
    console.log(e);//报错has already been declared;
 let e = 1;
     e = 100;
 console.log(e);//100,不可以重复定义,但能改变值

3.有严格的作用域 (var函数作用域,let块级作用域)

 // var 在当前函数作用域中可拿到值,函数外不行
    function fun(){
        var n = 10;
        if(true){
            var n =100;
        }
        console.log(n);
    };
    fun()//100;
    // let
    function fun(){
        let n = 10;
        if(true){
            let n =100;
        }
        console.log(n);
    };

    fun()//10,n=10作用在函数中,n=100作用在if判断中,作用域不同。

4.const 声明一个只读的常量,一旦声明,常量的值就不能改变;(与var对应的区别同let)

const m = 100;
     m=200;
   console.log(m);//error
  const r;//error 一旦声明就要赋值,不能只声明不赋值;
const obj = {};
    obj.name ="baby";
    console.log(obj);//{name:"baby"}复杂数据类型的值可以改变,内存地址不可以改变,地址内的值可以改变;
    const arr =[];
    arr.push(1);//1
原文地址:https://www.cnblogs.com/tianping-ondo/p/14669319.html