前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6之let、const

ES6之let、const

作者头像
wade
发布2020-04-24 10:29:11
2530
发布2020-04-24 10:29:11
举报
文章被收录于专栏:coding个人笔记coding个人笔记

虽然用着ES6一些常用的简单语法,但是对于ES6一直没有一个完整的认识,不管是用得上还是用不上。于是决定重头好好学一遍ES6。

块级作用域:

Let和const声明的是块级作用域的变量,让变量的作用域更合理了,更是很简单的解决了for循环闭包的经典问题。

function f() { let n = 5; if (true) { let n = 10; console.log(n); //10 } console.log(n); //5}f()

外层代码块不受内层代码块的影响。

代码语言:javascript
复制
for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}

函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

不存在变量提升:

Let和const声明的变量不像var一样存在变量提升,声明的只能在let声明之后使用。

console.log(a); //ReferenceError: a is not definedlet a = 2;console.log(b);var b = 0;//undefined

暂时性死区:

区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。简单说就是let是优先级。

var a = 123;if (true) { a = 1; //ReferenceError: a is not defined let a;}

不允许重复声明:

const声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值,否则报错。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。至于它指向的数据结构是不是可变的,就完全不能控制了。

const obj = {};obj.a = 0;

顶层对象:

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。

代码语言:javascript
复制
window.a = 1;a = 2;window.a // 2

上面代码中,顶层对象的属性赋值与全局变量的赋值,是同一件事。

顶层对象的属性与全局变量挂钩,被认为是 JavaScript 语言最大的设计败笔之一。

let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

代码语言:javascript
复制
let b = 1;
window.b // undefined

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档