读书笔记:深入理解ES6(一)

开篇词:这是一篇关于《深入理解ES6》的读书笔记的第一篇,主要是读第一章的笔记。该笔记基本上只记录思路和核心知识点,具体内容可以参考书上的代码和细节讲解,以求达到提纲挈领和后期方便温习的作用。

第1章 块级作用域绑定

  1. var声明和变量提升(hoisting)机制。

  该节中,主要讲述了作为原来ES5中经常使用到的关键字: var 来声明变量的一些小的缺陷,包括它声明的变量可以在其他位置也可以读取等带来的一些问题。因为var声明的变量通常有自动提升(hoisting)的机制,所以在代码块中,即使还没有到声明变量的位置,但是执行流仍然可以知道已经有了这个变量,只不过值是 undefined。

  

  2. 块级声明。

  该节中,主要讲述了 let 和 const 关键字声明变量的一些规则,以及和 var 声明变量的不同之处。let 声明的变量只在声明的块内(代码中为大括号)可以读到,而且 let 声明的变量不能重复声明,否则会报错。const 声明的变量值是常量,也就是说它声明一个变量后,这个变量的值是不能修改的。还有一个“临时死区”的概念,这个可以理解为,当由使用 var 改为使用 let 或者 const 后,原来那部分可以使用提升(hoisting)的地方,现在不能提升了,所以就成了“临时死区”。

  

  3. 循环中的块作用域绑定。

  该节中,以一个 for 循环函数开始,先讲述了如果按照惯例思维,使用 var i = 0; i < 10; i ++ 条件的话,在最后塞进数组后,打印出来的值其实并不是正常思维下的 0,1,..., 9 ,而是 10 个 10,这个是原来JS的一个漏洞,或者说设计的不好的地方,如果用原来的规范的话,必须使用立即执行函数,才能最终实现数组存入 0, 1, ... , 9的预期结果。那么,在ES6的规范中,修复了这一个缺陷,即使用 let 声明,或者 const 声明的话,那么 i 的值每次循环的时候都会是一个新的绑定,而不会使用原来的绑定,这样其实就实现了新的值被加入到数组中,解决了原来 var 循环声明时的一个缺陷。

  

  4. 全局块作用域绑定。

  该节中,主要讲了 var let const 和 window 的关系。使用 var 声明全局变量的时候,如果这个变量已经是 window 对象上属性了,这个声明仍然是有效的,但是容易和原来 window 已有的内置对象产生冲突;现在呢,如果使用 let 或者 const 来声明一个全局变量的话,那么这个时候和 window 对象上原来的属性就是不会相互覆盖,相当于声明的变量更加精准了。

(本节完)

原文地址:https://www.cnblogs.com/zxxsteven/p/11431722.html