ES6块级作用域let声明和const声明以及与var之间的区别
一、ES6块级作用域
let 声明
块级声明用于声明在指定作用域之外无法访问的变量,存在于:
①函数内部
②块内(字符{和}之间的区域)
禁止重声明
(1)如果在作用域由已经存在某个标识,再用let声明时会报错
var name = 'zhang'
let name = 'wang' // 报错
(2)如果在当前作用域内嵌另一个作用域,使可在内嵌的作用域中用let声明同名变量,代码如下:
var name = 'zhang'
if(status){
let name = 'wang' // 不会报错
}
const 声明
声明的是常量,一旦被设定后不可更改,所以,每个通过const声明的常量必须进行初始化。
正确:const name = 'zhang';
错误:const name;
const 与 let
相同之处:都是块级标识符,只在当前代码块内有效,不会提升至作用域顶部。
不同之处:无论在严格模式下还是非严格模式下,都不可以为const 定义的常量再赋值,否则会报错。
用const 声明对象
const 声明不允许修改绑定,但允许修改值,也就是说,用const声明对象后,可以修改该对象的属性值,代码如下:
const person = { name : 'zhang' };
// 可以修改对象属性的值 person.name = 'wang'
// 报错 person = { name:'wang' }
临时死区
let和const与var不同,声明的变量不会被提升到作用域的顶部,不可在声明之前访问这些变量。
if(status){
console.log(typeof value);
let value = "blue";
}
// 此时的console.log()会报错,此时的value还位于“临时死区”或TDZ中。
全局块作用域绑定
let和const与var的另一个区别是它们在全局作用域中的行为,当var被用于全局作用域时,会创建一个新的全局变量作为全局对象(浏览器环境中的window对象)的属性。var 声明的变量会无意中覆盖一个已经存在的全局属性。代码如下:
var RegExp = 'Hello'
console.log(window.RegExp) // Hello (覆盖)
块级绑定最佳实践
默认使用const,只在确定需要改变变量的值时使用let,这样就可以在某种程度上实现代码的不可变。防止某些错误的产生。
ES6块级作用域let声明和const声明以及与var之间的区别的更多相关文章
- ES6标准入门 第二章:块级作用域 以及 let和const命令
一.块级作用域 1.为什么需要块级作用域? ES5中只有全局作用域和函数作用域,带来很多不合理的场景. (1)内层变量可能会覆盖外层变量: var tem = new Date(); function ...
- ES6块级作用域及新变量声明(let)
很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域.用var声明的变量具有变量提升(declaration hoist ...
- es6 学习1 let表示变量 、const表示常量 与 var 变量的区别
一.let 1.看下代码,在函数中无论在哪里声明变量,都会自动提到函数顶部,这就是函数变量提升,它的作用于为当前函数中. function aa() { if(bool) { var test = ' ...
- ES6——块级作用域
前面的话 过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域.本文将详细介绍ES6新引入的块级作用域绑定机制.let和 ...
- ES6块级作用域
块级作用域的优点 避免变量冲突,比如程序中加载了多个第三方库的时候,如果没有妥善地将内部私有函数或变量隐藏起来,就很容易引发变量冲突: 可以方便的进行模块管理: 利于内存回收:(块级作用域里声明的变量 ...
- ES6 块级作用域
作用域包括:全局作用域,函数作用域,块级作用域. 为什么要用块级作用域: 1.内层变量可能会覆盖外层变量. var name = "kevin"; function call() ...
- ES6 let const 声明变量 块级作用域
ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...
- ES6入门一:块级作用域(let&const)、spread展开、rest收集
let声明 const声明 块级作用域 spread/rest 一.let声明与块作用域 在ES6之前,JavaScript中的作用域基本单元就是function.现在有了let就可以创建任意块的声明 ...
- ES6笔记(2)-- let的块级作用域
系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...
- 12.24 ES6浅谈--块级作用域,let
第一部分:ES6新增了块级作用域,let关键字用于声明变量,相较于var而言,let关键字不存在声明提前. 1.ES6真正的出现了块级作用域,使用双花括号括住并在其中用let声明变量,会存在暂时性死区 ...
随机推荐
- 云原生之旅 - 8)云原生时代的网关 Ingress Nginx
前言 当我们在Kubernetes部署的服务需要暴露给外部用户使用时,有三种选择:LoadBalancer,NodePort, Ingress. LoadBalancer类型得结合各个Cloud Pr ...
- C语言白盒测试讲义
好久没有做过C语言的白盒测试了,估计以后也没这个机会.把自己之前参加过的培训素材做个分享. 素材下载链接:https://pan.baidu.com/s/1LPD9Az04zEj8RuCICaKYxQ ...
- Project facet Java version 13 is not supported.
问题 导入的文件运行时出现报错:Project facet Java version 13 is not supported. 大概就是版本不支持,看了下自己的Java版本是1.8的,修改下版本即可运 ...
- Pandas_1_预备知识
Chapter1_Python基础 1.1 Python基础 推导式: 两个对象之间的映射关系,类似于实数之间关系变换的函数,只不过对象变成了矩阵. # Ex1-1 vacabulary = ['co ...
- Dev-Cpp下载与安装
目录 一.介绍 Dev-Cpp 二.下载 Dev-Cpp 1.通过百度网盘下载 2.通过 SourceForge 官网下载 三.安装 Dev-Cpp 写在结尾的话 免责声明 大家好,这里是 main工 ...
- 7-3 停车场管理 (20point(s))
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) .如果停车场已放满n辆 ...
- 02-线性结构4 Pop Sequence (25分)
02-线性结构4 Pop Sequence (25分) Given a stack which can keep M numbers at most. Push N numbers in the or ...
- Qt网络编程-书接上文,浅谈TCP文件收发,以及心跳包
qt网络编程-书接上文,浅谈文件收发 上文Qt网络编程-从0到多线程编程中谈到 在qt中的qtcpsocket通讯的用法,接下来浅谈一下关于tcp通讯的实际应用,当然了由于是浅谈,也不能保证其功能的完 ...
- PyTorch复现GoogleNet学习笔记
PyTorch复现GoogleNet学习笔记 一篇简单的学习笔记,实现五类花分类,这里只介绍复现的一些细节 如果想了解更多有关网络的细节,请去看论文<Going Deeper with Conv ...
- JavaScript:输出语法
主要有三种,如下所示: