目录
一丶变量的声明
在ES5中只能使用var和function来声明变量,在人们使用的时候发现其中有非常多的缺陷,后来在ES6中更新了let和const两种新的可以声明变量的方式但是他们都各有不同:
1.变量提升;
var:var在声明变量的过程中会将变量提升到作用域范围的最顶端,这样就算在声明之前也可以使用只不过值 为undefind,可重复声明变量;
function fn1(){
console.log(num)
// 此时num打印出来的为undefind
var num = 1
console.log(num);
// 此时num打印出来的为1
var num=2
console.log(num);
// 此时num打印出来的为2
num =3
console.log(num);
// 此时num打印修改过的为3
}
let:let在生命变量得时候并不会让他的变量达到提升,这样就能在声明之后使用,否则就会报错;在同一作用域不可以重复声明变量;
function fn2(){
// console.log(num)
// 此时num打印出来会报错
let num = 1
console.log(num);
// 此时num打印出来的为1
// let num=2
// 此时重新赋值就会报错
num = 2
// 此时num打印修改过的为2
}
const:const在声明变量的时候和let一样;在同一作用域不可以重复声明变量;
function fn3 (){
const a = 0
console.log(a);
// 此时num打印出来的为1
a=1
// 但是不能进行修改,否则报错
}
2.是否存在暂时死区;
let和const是存在暂时性死区的,就是说当你声明的变量绑定在一个块级作用域的时候这个变量就不会再受到其他的影响,而暂时死区就是没有声明代码之前是不可以使用变量的,只能等到代码被编译之后才能使用;
3.是否可以修改变量;
let和var是可以修改变量的,但是const声明的变量不可以修改,因为使用const声明的是常量,常量只要一声明就不可以在进行改变了,一般const声明之后会立即初始化,不能留到以后赋值
二丶一个新的数据类型Symbol
Symbol是ES6新的一个简单数据类型,经只要数据类型为Symbol就可以说明这是唯一的一个值,就算有重新写一个,也是说两个不一样,所以Symbol类的数据可以保证不会和其他属性一样。
let a =Symbol(1)
let b =a
// console.log(a)=>Symbol(1)
// console.log(b)=>Symbol(1)
三丶解构赋值
1.默认值法;当解构没有相对的数值就可以使用默认值;如下打印d为10
let arr=[1,2,3]
let [a,b,c,d=10]=arr
console.log(a);
console.log(b);
console.log(c);
console.log(d);
2.对象的结构赋值;
let a = {name:1,age:2}
let {name,age}=a
console.log(name);
console.log(age);
3.数组的结构赋值;
let arr =[1,2,3,4]
let [a,b,c,d]=arr
console.log(a);
console.log(b);
console.log(c);
console.log(d);
4.剩余模式;这时候b就是展开的2345
let [a,...b] = [1,2,3,4,5]
console.log(b)
四丶Promise的使用以及实现
promise是一个构造函数,可以解决回调地狱,它有自己的回调函数以及api
let a = new Promise((resolve, reject) => {
// return resolve(1)
return reject(2)
})
a.then(res=>{
console.log(res);
}).catch(req=>{
console.log(req);
})
*未完待续