var, let, const,、 命令的理解和区别;

以下内容参考:
阮一峰 ECMAScript 6 入门
建议您阅读以上文章,它更为详细

let命令 ##:

只在命名它的代码块中有效,并且和const一样,不会发生变量提升和重复声明一个变量,这也就说明:在声明一个变量之前,这个变量都不可获取;

与var的区别: var声明的变量会发生 变量提升;我们在声明它之前可以获取到变量,由于变量提升它被定义为undefined;

let命声明的变量只在它声明的代码块中有效:

if(true){
 let a = 1;
 var b =2;
}
console.log(a);//Uncaught ReferenceError: a is not defined
//let声明的变量只在声明时所在的代码有效;所以这里会报错;

console.log(b); // 2

let声明的变量不会发生变量提升:

if(true){
 console.log(a);//Uncaught ReferenceError: a is not defined
 console.log(b);//undefined
 let a =1;
 var b =2;
}


上面的代码也会报错,因为在let 声明变量之前,这个变量都是不可获取;

let不允许重复声明一个变量:

//报错
 if(true){
   let a =1;
   let a =2;
 }

//报错
if(true){
    var a =1;
    let a =2;
}

//而var是可以的
if(true){
    var a =1;
    var a =2;
}

const命令

const声明的变量只是一个可读的变量,这意味着你不能重新赋值const命令声明的变量;

if(true){
    const a= 1;
    a =2;//报错
}

上面会报错,因为const声明的变量不需要重新赋值,因为不运行重新赋值,所以我们在用cosnt声明变量的时候,要立刻初始化;

 if(true){
  const a;
  a =1;
 }
 这段代码会报错,因为const不允许变量被重新赋值,它只能被读取;

//正确的声明方式
if(true){
    cosnt a =1;
}

和let一样cosnt命令的有效区也仅限于声明它时所在的代码块中;

if(true){
    const a =1;
}
    console.log(a);//报错,


if(true){
    const a =1;
    console.log(a);//1
}

const也不会发生变量提升:

 if(true){
     console.log(a);//报错
     const a =1;
}

const也不允许重复命令一个变量:

 if(true){
     var a =1;
     const a =2;//报错
}

暂时性死区
只要在块级作用域内存在let或cosnt命令声明的变量,它们声明的变量就会绑定这个块级作用;也就是不受外部变量的影响;

var a =1;
if(true){
  console.log(a); //Uncaught ReferenceError: a is not defined
  let a = 1;

上面的代码在打印a变量时,报错,原因是在let声明的变量a不受外部变量a的影响;let没有变量提升,所有在声明之前获取就会报错;

引用一段话:
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

在let或const声明的变量之前,这个变量都不可以获取,这在语法上就叫 “暂时性死区”,也就是typeof()也不是一个百分比百的操作;

if(true){
     type of(a); //报错
     let a =1;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值