ECMAScript 6 之 let 和 const 命令
1、let基本用法
1.1、声明变量
let
声明的变量只在它所在的代码块有效。
1.2、不存在变量提升
var
命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined;
let
命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
1.3、暂时性死区(temporal dead zone,简称 TDZ)
只要块级作用域内存在let
命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响;
ES6 明确规定,如果区块中存在let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ);
暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
1.4、不允许重复声明
let
不允许在相同作用域内,重复声明同一个变量。
2、块级作用域
2.1、为什么要使用块级作用域?
第一种场景,内层变量可能会覆盖外层变量。
第二种场景,用来计数的循环变量泄露为全局变量。
3、const命令
3.1、const
声明一个只读的常量。一旦声明,常量的值就不能改变,声明的同时必须初始化。
3.2、const
的作用域与let
命令相同:只在声明所在的块级作用域内有效。
3.3、const
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
3.4、const
声明的常量,也与let
一样不可重复声明。
const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const
只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
转载于:https://www.cnblogs.com/wangyfax/p/9855804.html
ECMAScript 6 之 let 和 const 命令相关推荐
- 阮一峰 《ECMAScript 6 入门》:let 和 const 命令
以下内容全文出自 阮一峰的书: <ECMAScript 6 入门> 电子版地址:ES 6标准入门(第3版) let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于v ...
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
- 【面试题】【ES6】let和const命令 (面试必看)
给大家推荐一个实用面试题库 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 1.let命令 基本用法 用法类似于var,但是所声明的变量,只在let命令所在 ...
- js中的const 命令
js中的const 命令 一直以来我在我字典里认为const 命令就是用来声明一个常量,然后并非如此,这也是我在工作中偶然发现的,然后查了下文档才得知,记录在档,以供参考: const 定义 cons ...
- ES6 let和const 命令
ES6 let 和 const 命令 1. 变量声明 2. 变量提升问题 3. 暂时性死区(TDZ) 4. 块级作用域 4.1 为什么需要块级作用域? 4.2 ES6的块级作用域 4.3 块级作用域和 ...
- let const 命令
一.let命令 用于声明变量. 1) 所声明的变量只在let命令所在代码块内有效.(块级作用域) {let a=10;var b=1; } a // ReferenceError: a is not ...
- 2.let和const命令
1.let命令 let声明的变量,只在let命令所在的代码块内有效. {let a = 10;var b = 1; }a // ReferenceError: a is not defined. b ...
- ES6-let和const命令
let 1.ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 2.不存在变量提升 var命令会发生"变量提升"现象 ...
- ES6新特性之let和const命令
let 和 const 命令 var 之前,我们写js定义变量的时候,只有一个关键字: var var 有一个问题,就是定义的变量有时会莫名奇妙的成为全局变量. 例如这样的一段代码: for(var ...
最新文章
- mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
- MPB:南土所冯有智组-基于微量热曲线的微生物群落代谢特征分析
- 系统发生 1219 错误。 提供的凭据与已存在的凭据集冲突。
- 微信小程序lottiejs动画事例代码
- Android 毛小软件,毛库官方app
- 通过测试想到的一些问题
- 聚类算法应用场景实例十则
- VS2015如何使自己的exe文件在别人的电脑上运行(找不到MSVCP140D.dll)
- 【荐】万能清除浮动样式
- Java基础复习——继承机制
- OpenCV-Python实战(23)——将OpenCV计算机视觉项目部署到云端
- 2021计算机二级考试五月报名,2021年5月全国计算机等级考试报名时间
- arcgis 批量计算几何_ArcGIS四种计算图斑面积的方法
- hp打印机没有右键扫描_win7右键点击打印机图标没有扫描选项怎么解决
- 无源晶振负载电容值CL匹配方法及说明
- i2c-tools的使用方法及举例
- 【人工智能】谓词表示法与产生式知识表示实验
- win11右键如何直接打开所有选项
- 使用卷积神经网络进行实时面部表情检测
- elang 游戏 生成全局id
热门文章
- Linux连接荣耀路由器pro2,荣耀路由pro2和电脑怎么连接?连接一体机方法
- pycharm在linux安装插件,Pycharm安装go插件,开始go之旅
- 177. Nth Highest Salary
- 算法笔记--KMP算法 EXKMP算法
- java 多线程下载文件
- java 运用poi读取Excel 文件代码 demo
- JAVA中for循环写杨辉三角_java使用for循环输出杨辉三角
- redis 槽点重新分配 集群_弄懂一致性哈希后我打通了redis分区集群的原理
- 如何检测过时的Kubernetes API
- 2017年大白菜系统操作说_为什么操作系统在2017年更重要