1、let、var、const
(变量提升、块级作用域、暂时性死区、重复声明、值可以改变)
let命令声明变量tmp之前,都属于变量tmp的“死区”。
① 什么是变量提升
console.log(a);
var a = 1;// 输出 undefined
在代码中 使用 var 来声明变量的时候,会提到当前作用域的顶端,而赋值操作在原处不变
上面的两行代码相当于
var a;//(变量的声明)
console.log(a);
a = 1;
② 块级作用域(定义、作用)
为什么用块级作用域
- 内层变量可能会覆盖外层的变量;
- 用来计数的循环变量泄露为全局变量;
3、const定义的对象属性是否可以改变?
- 可以改变
- 原因:对象是引用类型的,const定义的对象t中保存的是指向对象t的指针,这里的“不变”指的是指向对象的指针不变,而修改对象中的属性并不会让指向对象的指针发生变化,所以用const定义对象,对象的属性是可以改变的。
- 基本数据类型——存储在栈区
Object——具体对象存储在堆区,栈区存放堆的地址
2、箭头函数
① 箭头函数
特性:(没有构造函数能力、this指向问题)
- 不能为箭头函数命名:箭头函数是函数表达式,是匿名,用完就扔了,所以没有构造函数的构造能力,内部没有this指向,而是继承父类的this指向
② 回调函数
- 理解了
首先定义一个函数,这个函数的特点:你定义了,但是并不会马上执行,而是要作为参数传入另一个函数
在使用另一个函数的时候,加载参数,这时候会 回调你之前定义的函数(实现了异步?)
③ 立即执行函数
- 作用
页面加载完成后只执行一次的设置函数。
将设置函数中的变量包裹在局部作用域中,不会泄露成全局变量。
(function () {
console.log("app")
})()
④ 严格模式
什么是严格模式
开启严格模式
为脚本开启严格模式
只为函数开启严格模式
严格模式下的变化
严格模式下的缺点
3、解构
ES6的解构说白了就是能够让我们一次性取到多个值:分为数组解构和对象解构
就是一次性创建多个变量
还可以跳过一些元素解构
var [,,three] = [1,2,3]; // three=3
var {name:nameA,age:ageA}={name:"Jhon",age:23};// nameA="Jhon",ageA=23
如果属性名和变量名一致时,可以缩写
var {name,age}={name:"Jhon",age:23};// name="Jhon",age=23
4、promise
JS中的promise对象是什么,是如何实现异步的,async和await是什么
5、set()和map()