setTimeout前端面试题
昨天去了某真香互聯(lián)網(wǎng)公司面試,面試官寫(xiě)了一段setTimeout的代碼(見(jiàn)下文),問(wèn)我打印出來(lái)什么,其實(shí)特別簡(jiǎn)單,是基礎(chǔ)知識(shí),我......腦袋里排山倒海般,各種想法在腦袋里打架,就是不知道正確答案,所以今天自己碼了一下。
?題目
for (var i = 0; i < 5; i++) {setTimeout(function() {console.log(i);}, i * 1000);}打印結(jié)果
分析
setTimeout() 方法用于在指定的毫秒數(shù)后調(diào)用函數(shù)或計(jì)算表達(dá)式。
該方法是異步的,每次for循環(huán)的時(shí)候setTimeout都會(huì)執(zhí)行,但是里面的function則不會(huì)執(zhí)行,而是被放入任務(wù)隊(duì)列,因此放5次;for循環(huán)的5次執(zhí)行完之后還不到1秒。只有主線上的全部執(zhí)行完之后,才會(huì)執(zhí)行任務(wù)隊(duì)列里的任務(wù),所以當(dāng)主線程for循環(huán)執(zhí)行完之后 i 的值為5,這個(gè)時(shí)候再去任務(wù)隊(duì)列中執(zhí)行任務(wù),i全部為5;
擴(kuò)展
如果把var 換成 let 呢?
?
因?yàn)?let? 是區(qū)塊變量,每個(gè) i 只能存活到大括號(hào)結(jié)束,并不會(huì)把后面的 for 循環(huán)的 ?i ?值賦給前面的setTimeout中的 i;而 var 是局部變量,這個(gè) i 的生命周期不受for循環(huán)的大括號(hào)限制。
總結(jié)
以上是生活随笔為你收集整理的setTimeout前端面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 那些牛逼的外贸人是如何在领英上“抢走你的
- 下一篇: setTimeout面试题