前端筆試原題,JS 控制紅綠燈循環輸出

前端筆試原題,JS 控制紅綠燈循環輸出

面試前端工程師崗位,分享其中的一道經典題目——

實現一個紅綠燈轉換函數,初始為紅燈,1s 後由紅燈轉黃燈,2s 後由黃燈轉綠燈,3s 後由綠燈轉紅燈,循環亮燈。

這道題目出現的概率很高,所以早有準備,一點不虛。

callback 的實現

由於是延時執行和循環輸出,最容易想到的是 setTimeout 和遞歸實現 ——

將紅綠燈轉換的過程視為一體,通過遞歸來循環調用。

前端筆試原題,JS 控制紅綠燈循環輸出

雖然能解決問題,但如果筆試這樣寫,基本就涼涼了。

上述的遞歸代碼,如果存在紅橙黃綠青藍紫七色信號燈,就需要嵌套 7 層。

產生著名的回調地獄問題。

解決 JavaScript 的回調地獄問題,方法之一是使用 Promise。

Promise 的實現

使用 Promise 將異步行為封裝起來,待異步行為完成後 resolve。

前端筆試原題,JS 控制紅綠燈循環輸出

上述代碼,使用了 ES6 的 Promise 函數,核心是定義了一個返回 Promise 對象的函數,通過 Promise 鏈式調用觸發紅綠燈的調用。

async/await 的實現

除了使用 Promise.prototype.then(),使用 ES8 的 async/await 也可以解決這個問題。

前端筆試原題,JS 控制紅綠燈循環輸出

通過 async 聲明一個異步函數,在函數內,通過 await 等待 Promise 函數的返回。前一個 await 返回後下一個 await 才進行,如此反覆。

通過同步的方式執行異步函數,盡顯優雅。

結語

以上就是解決紅綠燈循環輸出的解決方法,這是一道非常經典的問題。建議大家收藏備用。

你的點贊和轉發,是我創作的動力,希望給予支持。


分享到:


相關文章: