# es6

# var、let、const区别

共同点:都可以声明变量

不同点:

1、var具有变量提升机制,let和const没有

2、var可以多次声明同一个变量,let和const不可以

3、var,let声明变量,可以再次赋值,const声明常量,不可以再次赋值

# 箭头函数和普通函数的有什么区别?

1、this的指向问题

箭头函数的this只在箭头函数定义时就决定的,而且不会被call,apply,bind修改。
决定的条件是:箭头函数的this指向定义时外层的第一个普通函数的指向,如果后期修改了外层普通函数的this指向,箭头函数也不再发生更改,取决于定义时的this指向

//箭头函数
let obj = {
    run:function(){
        console.log('run',this)// run {run:fn}
        return ()=>{
            console.log(this)// {run:fn}
        }
    }
}
obj.run()();
obj.run().call(window);//此时指定返回函数的this指向为window,也不会发生改变

//普通函数
let obj = {
    run:function(){
        console.log('run',this)// run {run:fn}
        return function(){
            console.log(this)// window {window:window}  改变this指向为obj后 {run:fn}
        }
    }
}
obj.run()();
obj.run().call(obj);//此时指定返回函数的this指向为obj,会发生改变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

2、箭头函数不能new实例化(不能当作构造函数)

3、箭头函数没有prototype原型对象

4、箭头函数没有arguments

// 箭头函数
let run = ()=>{
    return 111
}
console.log(run());//111
console.log(new run());//run is not a constructor at <anonymous>:1:40
console.log(run.prototype);//undefined

let run = ()=>{
    cosnole.log(arguments);//arguments is not undefined
}  
run();
1
2
3
4
5
6
7
8
9
10
11
12

# Promise

  • promise有几种状态?
  • promise解决了什么问题?
  • promise和generator或者async和await有什么区别?
  • 有没有手写过promise?
# promise有几种状态?

promise有三种状态,分别为pending(进行中)、fulfilled(已成功)、rejected(已失败)

# promise解决了什么问题?

promise是异步编程的一种解决方案,解决“死亡回调”问题,比传统的解决方案(回调函数和事件)更合理更强大。

import http from './api/http'
// 传统方式
// 缺点:可维护性差,结构乱,易读性差
http.$axios({
    url:'/home'
}).then(res=>{
    http.$axios({
        url:'/list'
    }).then(res=>{
        ...
        //嵌套多层操作
    })
})

// promise 异步解决方案 无需嵌套,链式操作
    Promise.resolve('foo').then(res=>{
        console.log(res);
    }).then(()=>{
        console.log(111)
    }).then(()=>{
        console.log(222)
    }).then(()=>{
        console.log(333)
    })

// 输出:
//     foo
//     111
//     222
//     333

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

promise简单来说是一个容器,里面保存着

# promise和generator或者async和await有什么区别?

Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是遍历器对象(Iterator Object)。

下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield表达式(或return语句)为止。换言之,Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行


function* getData(){
    yield 'hello';
    yield 'world';
}

let t = getData();
consoole.log(t.next().value);//hello
consoole.log(t.next().value);//world

1
2
3
4
5
6
7
8
9
10

asyncawait

# 数组去重

# set和mapa

Last Updated: 3/16/2022, 10:26:58 PM