var let const

  重复定义 修改值 声明提升 块级作用域 循环
var ×(function除外)
let × ×
const × ×(数组对象除外) × ×

声明提升:var a = 1这句话会被浏览器读成 var aa = 1两句话执行,其中var a会在编译阶段就先执行了,而a = 1这段赋值代码会在原地等待执行阶段。

var重复定义变量会覆盖之前的值,可以修改,var声明的变量的作用域是定义变量的整个函数

function testVar(){
 var a = 0;
    if(true){ 
      var a =1;
      console.log(a)//输出1,两个a是同一个变量
    }
    console.log(a)//输出1
}



var temp = new Date();console.log(temp);
function f(){
  console.log(temp);//输出undefined  外边的temp作用不到function中 内部的temp会被声明提升
  if(false){
    var temp = "hello";
  }

}
f();

let不能重复定义变量也不能声明提升,let声明的变量的作用域是当前块

function testLet(){
 let a = 0;
    if(true){ 
      let a =1;
      console.log(a)//输出1,两个a是不同的变量
} console.log(a)//输出0 }

const定义的变量只读不可修改,但是数组的对象除外

const a={}; a.b=13;//不会报错 
const arr=[]; arr.push(123);
//不会报错
原文地址:https://www.cnblogs.com/lovetl/p/13397843.html