理解 JS 的同步操作与异步操作
测试一下你的思维方式+数学计算,看下题 : 小明早上要做:穿衣:3分种 , 洗漱:4分钟 , 吃饭、煮饭、锻炼各10分钟。问小明做完这些事最少要几分钟?
我们大部分人的答案是最少 30 分钟。为防止有人怼我,我特意从网上搜索到金质解答:( 可能是程序猿做呆了,写这个都想着各种bug 😁 )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
ok , 接下来进入我们今天的"主菜", 理解 JS 的同步操作与异步操作 。来吧,上才艺。
首先,你在看这篇文章时,需要 清楚地明白 这两个操作的意思,
- js 的同步操作并不是 👉 所有的任务一起同时操作之意;
- 同理, js 的异步操作也并不是 👉 一个任务执行完另一个任务开始执行
否则,可能下面的内容会把你绕晕。
下列选项中,全部是的同步操作是( );含有异步操作是( );它们的打印结果是什么呢?
A、
console.log(1);
console.log(2);
console.log(3);
B、
console.log(1);
setTimeout(function(){
console.log(2);
},0)
console.log(3)
聪慧的你,是不是一看就知道了答案了呢。没错,选项A的同步操作,执行结果是: 1 > 2 > 3 。选项B的异步操作执行结果是: 1 > 3 > 2 。
肯定会有人为什么是这样的结果呢?我知道身为大牛的你们知道,也有更好的解释。但如果我再在候场区坐着,就彻底坐实了“冷板凳”了。所以,小弟我只能厚着脸皮,主动给自己加戏。接下来,让小弟我来抛砖引玉,坐等各位大牛的留言。
选项A我就不用给大家讲解了,估计大家也不想看。那我直接从选项B开始。在选项B中,setTimeout 是异步代码,那什么是异步代码呢?先不要急着回答,还记得我在这篇文章开头讲的“首先”吗?想必大家经过思索,已经有了正确答案:
同时间执行的代码就是异步代码。但请注意一点,异步代码是在所有的同步代码执行完后才执行的。
学习过 JavaScript 小哥哥小姐姐肯定知道 JavaScript 的一大特性:单线程 。换个说法就是,她同一时间只能做一件事情。
任何软件都需要