今天来点好玩的~
一起猜猜以下几组代码输出的结果是什么?
第一组:
console.log(1);
setTimeout(function(){
console.log(2);
},10);
setTimeout(function(){
console.log(3);
},0);
console.log(4);
答案1:1,4,2,3
第二组:
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);
}
答案2:0,1,2,3,3,3
解析:本案例涉及到执行事件队列和定时器的概念,还是很容易理解的~
//执行过程
var i=0;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i); //0
i=1;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);//1
i=2;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);//2
i=3
function() {
console.log(i);//3
}
function() {
console.log(i);//3
}
function() {
console.log(i);//3
}
这里再补充一下定时器的相关知识:
定时器模块
1、一次性定时器
开启 var timer=setTimeout(回调函数,间隔时间) //当间隔时间到了,会执行一次回调函数;单位毫秒 |
清除 clearTimeout(timer) |
2、周期性定时器
开启 var timer=setInterval(回调函数,间隔函数) //每隔一段时间,调用一次回调函数 |
清除 clearInterval(timer) |
3、立即执行定时器
开启var timer=setImmediate(回调函数) |
清除clearImmediate(timer) |
开启process.nextTick(回调函数) |
注意:所有的定时器,回调函数都要放入事件队列执行。
4、案例:使用周期性定时器,每3秒钟打印一次'hello',3次以后清除定时器
</script>
<script>
var count=0
var timer=setImmediate(function(){
console.log("hello")
count++
if(count===3){
clearInterval(timer)
}
},3000)
</script>