ES6基础笔记:let和const

本文深入探讨了JavaScript中let和const的关键区别,包括作用域、适用场景、变量提升、暂时性死区、重复声明和常量值可变性。同时,解析了块级作用域的函数声明行为和const的本质,以及ES6中全局变量与顶层对象属性的关系。
摘要由CSDN通过智能技术生成

一、let和const的基本比较

 letconst
作用域声明所在的块级作用域声明所在的块级作用域
适用场景for循环内一旦声明不会改变的场景下
变量提升不存在不存在
暂时性死区YesYes
重复声明nono
常量值可变 no(一旦声明必须立即初始化)

 

二、块级作用域的函数声明 

块级作用域内的函数声明,

  • 行为类似于var,即会提升到全局作用域或函数作用域的头部;

  • 同时,函数声明还会提升到所在的块级作用域的头部;

应尽量不在块级作用域内声明函数,如果确实需要也应写成函数表达式,而不是函数声明语句。

 

三、const本质

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

 

四、顶层对象的属性

ES5 之中,顶层对象的属性与全局变量是等价的。

ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值