异步&单线程
题目(答案见每题下方空白处)
1.同步和异步的区别?分别举一个同步和异步的例子
同步会阻塞代码的执行,而异步则不会
alert函数就是同步的指令,而setTimeout为异步指令
2.setTimeout相关的笔试题
执行结果为:135,之后是2,1秒后打印4
3.前端使用异步的场景有哪些
1.定时任务:setTimeout、setInterval
2.网络请求:ajax请求、动态img加载
3.事件绑定
三者都需要等待,因为单线程的JS如果不添加异步机制,则必须执行完一个事件才可以执行下一个事件,阻塞了进程
知识点
异步
异步可以理解成在执行代码期间,不阻塞进程,可以执行其他任务
例如下方的代码
执行的结果为100,300,200
这里的200按照JS的解析顺序,应该在300之前,但是setTimeout是一个延时操作(异步),因此在这等待的1秒内,JS会执行下面其他不用等待的命令,1s后回来执行这个命令
而下面这个同步的代码则执行结果不同
执行时,先输出100,再弹出200,直到我们点击了弹出框后,才会弹出300
这里的alert和两个输出都是同步任务,只有执行完一个,才会执行另一个
使用场景
1.定时任务:setTimeout、setInterval
2.网络请求:ajax请求、动态img加载
3.事件绑定
单线程
可以理解成一次只能执行一件事,事项需要排队进行
由于JS是单线程的,只能执行完一个指令后执行下一个,但是也不能因为其中的某一项暂时无法执行(异步事件)而阻塞后续事件执行
因此,这里的异步事件会暂存起来,符合条件后再执行(时间、回调成功、事件触发等)