ES6深入理解之 let、const

一、ES6深入理解之 let、const

1. let

  • let声明的变量只在块级作用域内有效
  • let声明的变量不存在变量提升
console.log(a)  //undefined
var a = 10;

console.log(b)  //报错ReferenceError
let b = 1;
//var声明的变量可以变量提升,在console时a还没有赋值但已经存在,所以输出undefined
//let声明的变量不可以变量提升,在声明之前这个变量是不可以用的,输出会抛出一个错误
  • 暂时性死区
var tmp = 123;

if (true) {
  tmp = 'abc'; // 报错ReferenceError
  let tmp;
}
//在if这个代码块内,let声明变量之前变量是不可以用的,称为暂时性死区

//在暂时性死区内 typeof 并不是一个百分百安全的操作
typeof(n)  //报错ReferenceError
let n;
//因为在声明 n 之前 n 是不存在的

typeof(num)  //undefined
//也就表明,在没有 let 之前 typeof 是百分百安全的
  • 暂时性死区的本质,其实就是当进入这个作用域,变量是存在的,但是在 let 声明之前是不可以使用的
  • 不允许重复声明,let 不允许在相同的作用域中重复声明

2. const

  • const 声明只读的常量,一旦声明不能更改
  • const声明的变量不能改变值,也就是在生命的时候必须马上初始化,不能后续赋值,只声明不初始化就会报错
  • const 与 let 相同,只在声明所在的块级作用域内有效
  • const 声明的变量不能变量提升,存在暂时性死区
  • const 本质并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动,基本数据类型,值就存在变量所指向的内存空间,像引用数据类型,变量指向的内存空间保存的是地址,所以引用数据类型保证的就是保存的地址不变,但是地址指向的内容不保证
const foo = {};
foo.prop = 123; //给 foo 添加一个属性可以成功
foo = {}  //但是更新 foo 就会报错

//数组也相同
const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['lle'];    // 报错
  • 如果真的想将对象冻结,那么可以使用 Object.freeze 方法
const foo = Object.freeze({})
//此时 foo 既不可以添加属性,也不可以改变

== let、const声明的变量不属于window ==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值