关于setTimeout输出
老是搞混,今天总结一下
手写setTimeout在js中是要被push到宏任务队列的。
1、这里settimeout与for循环结合,并不能实现我所想的类似于setInterval那种,这三个定时器,都会在页面加载的时候同时开启,谁先跑得快谁先打印,并不是像串行那种你等我那种打法
function mysetInterval(fn, a, b) {
for (let i = 0; i < 3; i++) {
setTimeout(() => fn(), a + i * b);
}
}
- 要想实现串行效果
- 改成递归调用--参考settimeout实现setinterval
- 用async与await解决--参考repeat(fn,5,1000)写法
2、setTimeout虽然书写有顺序,这里谁跑得快就谁先输出
// 王五-李四-张三 (间隔1s输出)//
setTimeout(function () { //第一层
console.log('张三')
}, 3000)
setTimeout(function () { //第一层
console.log('李四')
}, 2000)
setTimeout(function () { //第一层
console.log('王五')
}, 1000)
// 王五-李四-张三 (间隔1s输出)
3、setTimeout代表的回调地狱
是会实现串行的效果的
setTimeout(function () { //第一层
console.log('张三');//等3秒打印张三在执行下一个回调函数
setTimeout(function () { //第二层
console.log('李四');//等2秒打印李四在执行下一个回调函数
setTimeout(function () { //第三层
console.log('王五');//等一秒打印王五
}, 1000)
}, 2000)
}, 3000)