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);
//不会报错

 

posted @ 2020-07-29 16:17  帖子搬运工  阅读(121)  评论(0)    收藏  举报