2020.06.09 genshuixue
ES6、7、8、9、10 你所知道的方法有哪些?
promise和async await与什么区别?async await的优势?
const p = new Promise(...)
p.then(funcA)
p.then(funcB)
setTimeout(() => {
p.then(funcC)
}, 100)
ABC都会执行吗?
const p1 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log('p1')
resolve()
}, 2000)
})
}
const p2 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log('p2')
resolve()
}, 2000)
})
}
const p3 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log('p3')
resolve()
}, 2000)
})
}
//期待每隔两秒输出p1、p2、p3,最后输出'done'
createQueue([p1, p2, p3]).then((msg) => {
console.log(msg) // 'done'
})
function createQueue(tasks) {
//code
}
for...in和for...of区别
for...in循环出的是key, for...of循环出的是value
for...in语句遍历一个对象的可枚举属性
它遍历的实际上是对象的属性名称,一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性
for...of语句遍历可迭代对象定义的要迭代的数据
可迭代对象(包括
Array,Map,Set,String,TypedArray,arguments 对象等等)
js事件循环机制
www.cnblogs.com/itgezhu/p/1… 一篇搞定(Js异步、事件循环与消息队列、微任务与宏任务)
同步代码执行完成后现在异步队列如下:
微任务:EFG (E里面产生一个微任务H)宏任务:ABC (B里面产生一个微任务I)执行顺序?EFGH ABIC
console.log('script start')
setTimeout(function() {
console.log('setTimeout1')
Promise.resolve().then(() => {
console.log('promise1')
})
},0)
setTimeout(function() {
console.log('setTimeout2')
},0)
let promise2 = new Promise((resolve) => {
resolve('promise2.then')
console.log('promise2')
})
promise2.then((res) => {
console.log(res)
Promise.resolve().then(() => {
console.log('promise3')
})
})
闭包知道吗?
拓展-》平时工作中哪些地方用到了闭包?
做题:
add(1)() => 1
add(1)(2)(3)(4)() => 10
// 输入一定是一个非0整数 或者不带任何参数,所以不用严格考虑参数检查
add(1)
add(2)
add(3)
add() // 6
const fun = () => {
let sum = 0
return num => {
if(num) {
sum += num
} else {
console.log(sum)
return sum
}
}
}
const add = fun()
或者:
// add(1)(2)(3)
const add = x => {
return y => {
return z => {
return x + y + z
}
}
}
console.log(add(1)(2)(3))
const add = num => {
let sum = num
const fun = x => {
if(x) {
sum += x
return fun
} else {
return sum
}
}
return fun
}
console.log(add(1)(2)(3)(4)())
函数柯里化(curry)
每次调用函数时,它只接受一部分参数,并返回一个函数,直到传递所有参数为止。
函数柯里化主要有3个作用:
参数复用:同一个参数的这部分逻辑可以共用提前返回: 它只接受一部分参数,并返回一个函数延迟执行: 直到传递所有参数为止
实现一个把普通函数柯里化的方法:
// 我们写一个通用的柯里化函数的方式,经过这个函数的转换,我们可以将调用方式简化
function curry = (fn,...args){
}
}