浅谈JS同步和异步
2019-07-18 19:07•编程•2523人阅读
在JS和线程里面都有着这两个相当重要的概念,同步异步,这对于初学者来说相当迷惑(当然,我也是初学者之一)这里就按照我的理解来讲一讲这两个东西。
1.同步
这个很好理解上一条执行完才能执行下一条,类似于线程里面的阻塞,也可以理解为Java线程里面的所有方法都上了一把锁,就是单线程。 同步,是所有的操作都做完,才返回给用户结果。
2.异步
异步执行的一条语句可以看成是Java里面的每个线程,执行一条语句就启动一个线程,当执行完以后就把执行的需求发送给控制程序,然后控制程序去完成剩下的工作。当然,可以变相地看成多个线程在同步执行。(迷惑点就在这里,同步相异执行,异步相同执行 )不过问题不大,记住是相反的就好啦。 异步,不用等所有操作等做完,就响应用户请求。
3.JS中的异步与同步
在JS中大多函数都有属性表明其是异步还是同步,下面放一个简单的例子,大家直接F12粘贴就可以看到结果:
console.log( 1 );
setTimeout(function() {
console.log(2)
}, 0 );
setTimeout(function() {
console.log(3)
}, 0 );
setTimeout(function() {
console.log(4)
}, 0 );
console.log(5)
复制
这里尽管setTimeout的time延迟时间为0,其中的function也会被放入一个队列中,等待下一个机会执行,当前的代码(指不需要加入队列中的程序)必须在该队列的程序完成之前完成,因此结果可能不与预期结果相同。