setTimeout和setInterval执行问题
window.setTimeout(function(){
console.log("1");
},0);
window.setInterval(function(){
console.log("2")
},100);
console.log("3");
> 3
> 1
> 2
> 2
浏览器可以多线程执行,但是JS引擎是单线程执行,定时器会在JS线程追加事件。
由此,看一个前端面试题:
for (var i = 1;i <= 5;i ++) {
setTimeout(function timer() {
console.log(i)
},i * 1000)
}
提示:作用域、闭包、事件循环
解决方法:
- 引入 IIFE1;
- ES6 的 let 定义块级作用域;
- ES5 的 bind() 函数绑定;
- 妙用setTimeout 的第三之后参数:对内部函数进行传参;
- timer函数封装调用