在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 閉包中,seTimeout中alert(i),為什么會(huì)亂序?

閉包中,seTimeout中alert(i),為什么會(huì)亂序?

一個(gè)很經(jīng)典的閉包題

for (var i = 1; i <= 5; i++) {
   (function a(i) {
       setTimeout(function() {
           alert(i);
       }, 1000);
   })(i);
}

按理說(shuō),應(yīng)該彈出1 2 3 4 5 ,但是實(shí)際彈出的卻是亂序的。
換成console.log(i)就是1 2 3 4 5。
這是為什么呢?

回答
編輯回答
艷骨

因?yàn)?code>alert會(huì)阻塞進(jìn)程
第一個(gè)彈出的必定是1,彈出的時(shí)候如果你不點(diǎn)擊確定,那么就回一直阻塞著,而這時(shí)所有的后續(xù)代碼和回調(diào)函數(shù)都不會(huì)在執(zhí)行。

同步代碼執(zhí)行完成后,后生成5個(gè)定時(shí)器,在彈出1等待你點(diǎn)擊確定時(shí),后面的所有的定時(shí)器都已經(jīng)準(zhǔn)備好了,所以是亂序的

console函數(shù)不會(huì)阻塞,所以按照順序執(zhí)行的

2018年5月18日 08:01