单线程:一次只能做一件事情
console.log(10);
setTimeout(function(){
console.log(20);
},1000)
console.log(30);//异步
//打印结果是:10 20 30
上面程序的执行顺序如下:
- 执行第一行,打印10
- 执行setTimeout时,这里面的函数会被存起来在一个队列里面,不会立即执行(不能同时处理两件事,与单线程特点有关)
- 执行最后一行,打印30
- 所有程序处理完,处理机处于空闲状态,立马看看队列里面有没有待执行的函数啥的
- 发现setTimeout里面的函数,这个时候执行(也就是说,这个时候,一一秒过去,解禁,下面的题也可以这么理解) ,会打印出来20
单线程和异步的关系
相关面试题:
同步和异步的区别在哪里,分别举一个同步异步的例子
-
同步会阻塞代码运行,异步不会
异步:console.log(10); setTimeout(function(){ console.log(20); },1000) console.log(30);//异步 //打印结果是:10 20 30
同步:
console.log(1000);
alert(2000);//会阻塞,也就是不会产生异步
console.log(3000);
//打印结果是:1000 2000(按确定之后出现3000) 3000
一个关于setTimeout的笔试题
console.log(1);
setTimeout(function(){
console.log(2);
},0)
console.log(3);
setTimeout(function(){
console.log(4);
},1000);//1 3 2 4
//****************************
console.log(1);
setTimeout(function(){
console.log(2);
},1000)
console.log(3);
setTimeout(function(){
console.log(4);
},0);//1 3 4 2
//**************************
console.log(1);
setTimeout(function(){
console.log(2);
},1000)
console.log(3);
setTimeout(function(){
console.log(4);
},1000);//1 3 2 4
前端需要使用异步的场景是哪些
(需要等待的时候)
- 定时任务:setTimeout,setInterval
- 绑定事件:addEventListener(click等等)
- 网络请求:ajax和img动态加载
网友评论