let与const的关系与在Scala中var和val以及在Swift中var和let是一样的,都是分别用于定义变量和常量的语句。
而在ES2015 中,let的设计初衷便是为了 代替 var。这就意味着,TC-39 希望在ES2015之后,开发者尽可能甚至彻底不再使用var来定义变量。从工程化角度上看,我们应该在ES2015中遵从以下三条原则:
1.一般情况下,使用const来定义值的存储容器(常量)。
2.只有在值容器明确地被确定将会被改变时才使用let来定义(变量)。
3.不再使用var。
在ES2015 中,TC-39 为ECMAScript引入了一种新的循环语句for..of,它主要的用途是代替for..in循环语句。在ES5 中,TC-39 为Array对象引入了Array.forEach方法以代替for循环,其中Array.forEach方法的特点便是自带闭包,以解决因为缺乏块级作用域导致需要使用取巧的方法来解决var的作用域问题。而在ES2015 中,我们有了let和const并解决了块级作用域的问题,那是不是从前简洁的for又可以回来了?
因块级作用域的存在,使得for循环中的每一个当前值可以仅保留在所对应的循环体中,配合for-of循环语句更是免去了回调函数的使用。
配合ES2015 中的解构(Destructuring)特性,在处理JSON数据时,更加得心应手。
在ES5 中,数组(Array)类型被赋予了一个名为forEach的方法,用于解决当时for循环的作用域问题。而forEach方法需要传入一个回调函数来接收循环的每一个循环元素并作为循环体以执行。同时,这个回调函数在标准定义中会被传入三个参数,分别为当前值、当前值的下标和循环数组自身。在ES2015 标准中,数组类型再次被赋予了一个名为entries的方法,这个方法有什么用途呢?它可以返回对应的数组中每一个元素与其下标配对的一个新数组,我们以代码示例来说明。
这个新的特性可以与解构和for-of循环配合使用。