1.暂时性死区
块级作用域内,凡是用let和const声明的变量之前使用改变,就会报错;
2.es5中全局作用域和函数作用域中的变量会发生覆盖现象;函数作用域中的变量会发生变量提升,从而覆盖全局中定义的变量,输出undefined;
3.es6允许在会计作用域中声明函数;类似于var,会提升到全局作用域或者父级函数作用域的顶部;同时还会提升到所在的块级作用域的顶部;
避免块级作用域内使用函数声明;(不要使用匿名函数的声明表达式,可以使用变量函数表达式)
4.const不是声明的变量的值不能改变,而是变量指向的内存地址保存的值不能改变;const声明的复合数据类型,它指向的只是一个固定的内存地址,保存的知识一个指向实际数据的指针,它的数据结构是不可控的;因此避免使用const定义复合数据类型;
5.es5中顶层全局变量为顶层变量的属性(var a = 1; window.a = 1;)
数组扩展
1.求最大值&Array的按顺序concat
Math.Max(...[1,2,3])let arr1 = [1,2,3];
let arr2 = [4,5,6,7];
arr1.push(...arr2);
Array.prototype.push.apply(arr1,arr2); //ES52.数组复制之后,新数组指向的是原数组的底层数据结构的指针。操作新数组亦操作原数组;
const arr1 = [1,2];
const arr2 = [...arr1]; //const [...arr2] = arr1;3.数组合并
[...arr1,...arr2] //浅拷贝(对原数组元素的引用)4.解构赋值
const [first,two,...three] = [1,2,3,4,5]; //扩展运算符只能放在数组的最后一个元素,否则报错