ES6之let、const

虽然用着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()

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

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 之中,顶层对象的属性与全局变量是等价的。

window.a = 1;a = 2;window.a // 2

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

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

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

let b = 1;
window.b // undefined

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vue国际化vue-i18n简单使用

    之前一直想做个国际化、在线换肤和拖拉拽生成网页的demo,或者说实现思路。拖拉拽生成网页一直没什么思路,今天先实现国际化。当然是直接用插件了,并不是自己实现

    wade
  • 性能知识点二

    之前讲到重排,布局的时候使用flex时,比使用inline-block和float时重排更快,所以在布局时可以优先考虑Flex。

    wade
  • js拖拽自动排列

    上一次写了拖拽,其实主要还是想实现拖拽之后实现自动排列,跟手机屏幕那样移动图标可以自动排列,先看效果:

    wade
  • es6之块级作用域

    用户1741436
  • JavaScript let和const不完全指北

    let 声明是 ES6 中最广为人知的特性之一,它和 var 声明功能类似,都用于变量声明,但是有着不同的作用域规则。 var 声明的变量是基于词法作用域的,仍...

    撸码那些事
  • ES6常用新特性学习1-let和const

    在ES6以前,变量的声明都是使用var关键字,且会进行变量声明提升。另外,我们曾经讲过,JS中是没有块级作用域的,这一点也带来了很多的不便。ES6 新增了let...

    love丁酥酥
  • let、const、var 的区别

    清出于兰
  • var、let、const的区别

    用 var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,或者对于声明在任何函数外的变量来说是全局。

    三分恶
  • ES6之let和const命令

    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

    syy
  • 深入浅出webpack学习2--配置DevServer

    上一章介绍过DevServer可以用来提高开发效率,它提供一些配置可以改变DevServer的默认行为。要配置DevServer除了在配置文件里通过devSer...

    双面人

扫码关注云+社区

领取腾讯云代金券