傳言很多互聯(lián)網(wǎng)公司不是停止招聘就是裁員的,相比春節(jié)后肯定有很多前端程序員需要找工作捉腥,于是就免不了面試了,本人就分享一道特別衬慊考的筆試題抵碟,一道題就能用來面試各種階段的前端工程師。
一段看似簡單的代碼
上面這段程序的運行結(jié)果是立磁?只要你對 JS 中同步和異步代碼的區(qū)別、變量作用域剥槐、閉包等概念有正確的理解唱歧,就知道正確答案是5,5,5,5,5,5;
用->表示兩次輸出間有 1 秒粒竖,而逗號表示可忽略呢颅崩?
循環(huán)執(zhí)行過程中,幾乎同時設(shè)置了 5 個定時器蕊苗,一般情況下沿后,這些定時器都會在 1 秒之后觸發(fā),而循環(huán)完的輸出是立即執(zhí)行的, 所以結(jié)果是 5 -> 5,5,5,5,5朽砰;
如何讓輸出變成:5 -> 0,1,2,3,4尖滚?
- 利用 IIFE(聲明即執(zhí)行的函數(shù)表達式)來解決閉包造成的問題:
- 利用函數(shù)的參數(shù)傳遞是按值傳遞的特征,:
如何讓輸出變成 0-> 1-> 2->3->4->5漆弄?
- 增加定時器
- 基于ES6 Promise 的解決方案
- 完全基于ES6
- 如何讓代碼層次更好
- 能否使用ES7哥蔚?
- 還能優(yōu)化嗎?
結(jié)語
一道看似簡單的筆試題渤愁,其實背后可以考察的東西很多,作為一個有追求的碼農(nóng)深夯,不斷打牢基礎(chǔ)抖格,才能寫得出讓自己下跪的代碼!