1、js事件循环:宏任务和微任务
- 宏任务:I/O(比如文件读写等)、setTimeout、setInterval、包括整体js代码(script标签下的同步任务代码
- 微任务:Promise.then/catch/finally、generator、async/await等
二者执行顺序:有微任务则先执行微任务,没有微任务才执行宏任务
那么我们来做一个练习
setTimeout(() => {
console.log(1)
}, 0)
new Promise((resolve, reject) => {
console.log(2)
for (var i = 0; i < 1000; i++) {
i === 999 && resolve()
}
console.log(3)
}).then(() => {
console.log(4)
})
console.log(5)
2、es5数组5种迭代方法
every、some、forEach、filter、map、reduce
3、js遍历数组方法总结,forEach、for of和for in
- forEach不可以遍历对象,这也是它和for in的一个区别
优点:遍历的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率
缺点:跳出循环无法像其他的遍历方式那样通过break,return跳出循环,通常使用抛出异常的方式结束循环
for循环:
优点:程序简洁,结构清晰,循环初始化,循环变量化,循环体和循环条件位置突出
缺点:结构比while循环复杂,容易出编码错误,不可以遍历对象
条件i<arr.length时间复杂度O(n)到O(1)的方法就是把arr.length保存在一个数组里面。可以continue也可以breakfor in:大部分用于遍历对象,for in循环里面的index是string类型的,代码每执行一次,就会对数组的元素或者对象的属性进行一次操作
优点:可以遍历数组的键名,遍历对象简洁方便
缺点:某些情况下,会出现随机顺序的遍历,因为里面的值是string类型,所以增加了转换过程,因此开销较大
- for 0f: 可遍历map,object,array,set string等
优点:避免了for in的所有缺点,可以使用break,continue和return,不仅支持数组的遍历,还可以遍历类似数组的对象,支持字符串的遍历最简洁,最直接的遍历数组的语法 支持map和Set对象遍历
缺点:不适用于处理原有的原生对象(原生对象是一个子集,包含一些在运动过程中动态创建的对象)