Javascript 之《深入理解ES6》

本文章是读《深入理解ES6》这本书查缺补漏后的整理归纳,如果是小白,那么这篇文章绝对适合你~

第一章 块级作用域和let、const

1、什么是变量提升?

es5中,我们使用var来声明变量,但是var会存在 “变量提升”。

什么是变量提升?就是变量会被提升至当前作用域的最顶端

如上图所示,变量value被提升,但是赋值操作被留在了原地,所以其他地方的value值为undefined。

es6引入块级作用域来强化对变量声明周期的控制

2、什么是块级声明?

大白话就是在指定作用域内声明变量,其他作用域无法访问。

书中说的作用域有两种,函数内部,块中(即 { 和 } 中),但是其实有些许不准确。

{...} 并没有形成作用域,而是因为es6中 let、const的特性,让 {...}形成了作用域,如果是在{...}中使用var声明,那么它就不具备作用域的效果。

3、let 声明

先了解下它做重要的2个特性

(1)不存在变量提升

(2)同一个作用域中不能重复定义已经存在的变量

4、const 声明

先了解它最重要的几个特性

(1)不存在变量提升

(2)一旦声明必须赋值初始化,一旦赋值不可修改

(3)同一个作用域中不能重复定义已经存在的变量

值得注意的是,const声明变量赋值为基本类型后,再次修改会报错。但是如果赋值引用类型数据,可以修改其值,原因是引用类型数据存储的只是指向真正数据的地址而已,我们修改数据并不会影响这个地址的变化。

5、临时死区(Temporal Dead Zone 简称TDZ)

通常用来描述let、 const的不提升效果。Javascript 引擎在扫描代码时遇到var声明的变量,就将它提升到顶部。遇到 let 或者 const 声明,就将它放到TDZ中。

访问TDZ中的变量就会报错,只有当执行过变量声明的语句,才会从TDZ中移除,然后正常访问。

这种情况注意一下:

来源:https://www.icode9.com/content-1-846901.html

(0)

相关推荐

  • 1.变量:var,let,const

    var在ECMAScript的所有版本中都可以使用,而const和let只能在ES6及更晚的版本中使用. var,let,const三个关键字的区别 var: 1)声明作用域:在函数内部,使用var定 ...

  • let和const命令

    let 命令 let只在声明所在的块级作用域内有效,需要先申明后使用 { let a = 10; var b = a; } a // ReferenceError: a is not defined ...

  • TS 变量声明

    本文知识体系: 变量声明 var声明 作用域规则 捕获变量怪异之处 let声明 块作用域 重定义及屏蔽 块级作用域变量的获取 const声明 let vs const 解构 解构函数 对象函数 属性重 ...

  • 深入解读ES6系列(一)

    前言: 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,我说啦这个月要带的福利,说了更的博客肯定不能水你们,要一起进步学习嘛,今天我就把我学习最经典的Blue的ES6掌握 ...

  • 模块二:ES新特性与TypeScript、JS性能优化

    一.请说出下列最终得执行结果,并解释为什么. 解答:执行结果为:10            首先该段代码在全局作用域中声明了个空数组a,然后for 循环时是使用 var 定义循环变量 i (存在变量提 ...

  • 如何理解javascript的对象?

    WEB前端开发社区 2021-07-23 1.1 什么是对象? 对象是事物,在现实世界中,一个球,一张桌子,一辆汽车都是对象. 对象就是具有可描述特征的事物,我们可以用某种特定的方式去影响和操作它. ...

  • 深入理解JavaScript作用域和作用域链

    目录 前言 作用域(Scope) 1.什么是作用域 2.全局作用域和函数作用域 3.块级作用域 作用域链 1.什么是自由变量 2.什么是作用域链 3.关于自由变量的取值 作用域与执行上下文 解释阶段: ...

  • JavaScript基础ES5/ES6常用数组方法汇总

    一.Array数组常用方法 1.栈方法(先进后出) push():在数组的最后一项后追加值(参数:可以为多个值或数组) 返回:数组的长度,改变了原数组 var a=[1,2,3] a.push(9); ...

  • 深入理解JavaScript面向对象的程序设计(一)——对象的创建

    JavaScript面向对象的程序设计(一)--对象的创建 目录 JavaScript面向对象的程序设计(一)--对象的创建 5.1 三个属性(三个指针) 5.2 理解原型对象 5.3 读取对象的属性 ...

  • JavaScript ES6代理的实际用例,快速教你用好ES6代理

    元编程是一种强大的技术,使你能够编写可以创建其他程序的程序.ES6借助代理和许多类似功能,使在JavaScript中利用元编程变得更加容易.ES6 Proxy(代理) 有助于重新定义对象的基本操作,从 ...

  • 全国人大常委会关于《中华人民共和国刑法》第九章渎职罪主体适用问题的解释(附:理解与适用)

    ☞[招募律师站长]☜ 全国人民代表大会常务委员会关于<中华人民共和国刑法>第九章渎职罪主体适用问题的解释 (2002年12月28日通过) 全国人大常委会根据司法实践中遇到的情况,讨论了刑法 ...

  • 体谅与理解

    人生的路上,如果懂得体谅,懂得理解,懂得宽容,日子就会很温馨,也会很安宁. 人生的路上,如果缺少体谅,不能理解,没有谦让,日子就会很糟糕,越过越烦恼. 生活中的很多烦恼,就是源于我们不能够体谅,过分在 ...

  • 色盲患者看到的世界永远黑白的,他们是无法理解世界的真实色彩的

    哲学那点事(五)--我能认知什么?色盲患者看到的世界永远黑白的,他们是无法理解世界的真实色彩的色盲是由于视网膜视锥细胞中的光敏色素异常或不全所导致的色觉紊乱,从而缺乏辨别一种或多种颜色的能力.色盲又分 ...

  • 特级教师:初中阅读理解33个答题公式 60篇训练题,挑战1分不扣

    语文考试中,同学们普遍认为最难的不是作文,而是阅读理解.初中语文阅读理解篇幅大,内容深奥.要么不知道怎么作答,要么答了很多,却不在踩分点上,自我感觉良好,但得分却少得可怜. 而且在考试中,因为阅读理解 ...