Javascript异步与同步问题

1.什么是同步:

同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。同步操作的代码是从上到下执行的。

2.什么是异步:

先刷牙,再烧水,再整理发型,等水壶滴的一声通知我水烧开了,我再取刚烧开的水洗脸,是异步

(1)如果异步操作的代码在同步操作代码的上方,不必等待异步执行完毕,先执行同步操作,所有同步操作完成之后,再执行异步操作。
(2)同步操作的代码是从上到下执行的。
(3)如果一段代码里有多个异步操作,执行顺序并不是从上到下的,先执行耗时短的,再执行耗时长的。
         如果耗时一样长则看函数的排序,或者是否回调。

3. 常见的异步:

(1),点击时间,

(2),定时器 setTimeout()

(3),AJAX请求。

(4).回调函数

4.异步实例:

最后来一个经典的面试题来帮助大家理解js的同步和异步。

//执行下面这段代码,执行后,在 5s 内点击两下,过一段时间(>5s)后,再点击两下,整个过程的输出结果是什么?

输出结果的先后顺序是:

 

 解释:

(1)先执行同步操作:同步操作有for循环,console.log('click begin')  ,waitFiveSeconeds(),同步操作的执行顺序是从上到下的,因此执行顺序是for循环,然后是        console.log('click begin') 最后是waitFiveSeconds函数

(2)执行异步操作,setTimeout()函数属于异步操作,在同步任务执行的期间,‘timera’,‘timerb’对应的回调和click事件的回调先后入队列,等待执行。

由于点击事件是在5s内点击了两次,所以执行完waitFiveSeconds函数后,执行点击事件。接着

5.setTimeout(fn, 0) 的意思是,将回调函数fn立刻插入消息队列,等待执行,而不是立即执行。看一个例子:

setTimeout() 是属于 window 的“异步”方法,该方法用于在指定的毫秒数后调用函数或计算表达式

setTimeout("alert('对不起, 要你久候')", 3000 )    //3秒后,浏览器出现弹框警告
setTimeout("countSecond()", 1000)     //一秒后,执行countSecond()方法

猜你喜欢

转载自www.cnblogs.com/panzai/p/12431028.html