代码改变世界

JS异步和单线程

2019-06-05 00:42  ZHSwater  阅读(247)  评论(0)    收藏  举报

一题目:

a:同步和异步的区别?分别举一个同步和异步的例子

b:一个关于setTimeout的笔试题

c:前端使用异步的场景有哪些?

大家可以先想想,能否完全理解。

首先咱们先看一个例子,直接上代码

1 console.log(100)
2 setTimeout(function(){
3   console.log(200)
4 },1000)
5 console.log(300)

个人理解:如果大家不知道setTimeout的用法。该段代码先打印100,然后等待1秒打印200,最后再打印300。这是人的思维而不是浏览器的思维,这个逻辑显然不对

正确的逻辑是: 打印100,打印300,1秒后打印200

接下来再来看看同步的例子:

1 console.log(100)
2 alert(333)
3 console.log(300)

 这里是打印100,浏览器弹出提示333,用户点击确定后,浏览器打印300.这个就是同步的例子,这个逻辑会明显阻塞后面的逻辑。

二何时需要异步

1.在可能发生等待的情况

2.等待过程中不能像alert一样阻塞程序运行

3.因此,所有的“等待的情况”都需要异步

三前端使用异步的场景

1.定时任务:setTimeout,setInverval

2.网络请求:ajax请求,动态img加载

3.事件绑定

1 console.log('start')
2 document.getElementById('kw').addEventListener('click',function(){
3   console.log('事件点击了')
4 })
5 console.log('end')

上图是在浏览器下执行的代码。打印了start和end。用户点击的时候,就会打印“事件点击了”

四 同步和异步的区别

1.同步会阻塞代码运行,而异步不会

2.alert是同步,setTimeout是异步

五 一个关于setTimeout的笔试题

1 console.log(1)
2 setTimeout(() => {
3   console.log(2)
4 }, 0)
5 console.log(3)
6 setTimeout(() => {
7   console.log(4)
8 }, 1000)
9 console.log(5)

 

该程序执行结果为:1 3 5 2 4。如果和你想得一样,那么恭喜你,你已经明白了异步和同步,但是学无止境,加油吧,少年!!!