# 深入理解ES6

# 《深入理解ES6》读书笔记

# 作用域

Javascript有函数作用域全局作用域, 并没有块作用域. 关键字var或者function声明的变量会被提升, 即无论在作用域的哪里声明, 在解析时都会放到作用域的顶部.

关键词letconst可以创建块级作用域, 它们声明的变量不会提升,而且只可以在声明这些变量的代码块中使用。如此一来,JavaScript声明变量的语法与其他语言更相似了,同时也大幅降低了产生错误的几率,因为变量只会在需要它们的地方声明。与此同时,这一新特性还存在一个副作用,即不能在声明变量前访问它们,就算用typeof这样安全的操作符也不行。在声明前访问块级绑定会导致错误,因为变量还绑定在临时死区(TDZ)中。
letconst的行为很多时候与var一致。然而,它们在循环中的行为却不一样。在for-infor-of循环中,letconst都会每次选代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值,而非最后一次迭代后的值(像使用var那样)。letfor循环中同样如此,但在于for循环中使用const声明则可能引发错误。

实践建议

默认使用const ,只在确实需要改变变量的值时使用let 。这样就可以在某种程度上实现代码的不可变,从而防止某些错误的产生。

# 字符串与正则表达式

字符串匹配以前用indexOf(指定文本)方法, 判断指定文本在字符串的索引值, 不存在则返回-1.
ES6新增下面方法:

  • includes(指定文本, [搜索位置索引])方法: 判断字符串中是否含有指定文本.
  • startsWith(指定文本, [搜索位置索引])方法: 判断字符串是否以指定文本开始.
  • endsWith(指定文本, [搜索位置索引])方法: 判断字符串是否以指定文本结尾.
  • repeat(n)方法: 将字符串重复n次并返回.
更新于: 3/26/2020, 8:27:40 AM