let、const和var的区别
1.重复声明 var允许重复声明,let、const不允许;
2.变量提升 var 会提升变量的声明到当前作用域的顶部,let、const不存在变量提升;
3.暂时性死区 只要作用域内存在let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响;
4.window对象的属性和方法 全局作用域中,var声明的变量,通过function声明的函数,会自动变成window对象的属性或方法。let、const不会; // var/function var age = 18; function add() {}; console.log(window.age); console.log(window.add === add);
5.块级作用域 var 没有块级作用域。let、const有块级作用域; 作用域链:内层作用域->外层作用域->...->全局作用域;
模板字符串
let angel = nu啦啦♪(^∇^*)${angelMogui};
箭头函数
-
非箭头函数(一般函数)的this指向调用该函数(自己)的对象;
-
箭头函数没有自己的this指向,需要通过作用域链(由内向外)查找;
-
不适用箭头函数的场景:①构造函数(因为构造函数的this指向自己的实例,而箭头函数没有this指向); ②需要this指向调用对象的时候; ③需要使用arguments的时候;【箭头函数中没有arguments】【可以用剩余参数】
解构赋值
定义:解析某一数据的结构,将想要的东西提取出来,赋值给变量或常量;
数组的解构赋值: 例如const [a, [,,b], c] = [1, [2,3,4], 5]
数组解构赋值的默认值:例如const [a=1, b=2] = [3]; 【注意:只有当一个数组成员严格等于(===)undefined时,对应的默认值才会生效】