這篇文章主要跟大家分享了一次圍繞setTimeout的前端面試經驗,是一篇有意思的圍繞setTimeout展開的前端開發考題,考察了for循環、計時器setTimeout()、JavaScript閉包、匿名函數和Promise等,一不小心你可能就會做錯,快來看看你有沒有掌握了上面的知識。
前言
前端這個近年的熱門領域,搞事氣氛特別強烈,我朋友小偉最近就在瘋狂面試,遇到了許多有趣的面試官,有趣的面試題,我來幫這個搞事boy 轉述一下。
具體如下:
以下是我一個朋友的故事,真的不是我。
for (var i = 0; i < 5; i++) { console.log(i); }
「小偉,你說說這幾行程式碼會輸出什麼?」
當面試官在Sublime 打出這幾行程式碼時,我竟有點蒙蔽。蛤?這不是最簡單的一個循環嗎?是不是有陷阱啊,我思索一下,這好像跟我看的那個閉包的題很像啊,這面試官是不是沒寫完啊?有毒啊。
“應該是直接輸出 0 到 4 吧...”,我弱弱的說到。
「是啊,別緊張,這題沒啥陷阱,我就是隨便寫一下。」
(Excuse me?面試官你是來搞笑的嗎,嚇死老子了! )
「那你在看看這幾行程式碼會輸出什麼?」
for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000 * i); }
額,什麼鬼,怎麼還不是我背了那麼多遍的那道閉包題,讓我想想。 setTimeout 會延遲執行,那麼執行到 console.log 的時候,其實 i 已經變成 5 了,對,就是這樣,這麼簡單怎麼可能難到老子。
「應該是開始輸出一個5,然後每隔一秒再輸出一個5,一共5 個5。」
「對,那該怎麼改才能輸出0 到4 呢? 」
終於到我熟悉的了,加個閉包就解決了,穩!
for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }, i * 1000); })(i); }
「很好,那你能說一下,我刪掉這個i 會發生什麼事嗎?」
##
for (var i = 0; i < 5; i++) { (function() { setTimeout(function() { console.log(i); }, i * 1000); })(i); }「這樣子的話,內部其實沒有對i 保持「很好,那我給你改一下,你看看會輸出什麼?什麼鬼,這是什麼情況,讓我想想。這裡給 setTimeout 傳遞了一個立即執行函數。額,setTimeout 可以接受函數或
字串
作為參數,那麼這裡立即執行函數是個啥呢,應該是個undefined ,也就是說等價於:
for (var i = 0; i < 5; i++) { setTimeout((function(i) { console.log(i); })(i), i * 1000); }而立即執行函數會立即執行,那麼應該是立刻輸出的。 「應該是立刻輸出0 到4 吧。」
「哎喲,不錯哦,最後一題,你對Promise 了解吧?」
「還可以吧....”
「OK,那你試試這題。 ! ! !我想靜靜!
這題應該要檢視我 JavaScript 的運作機制的,讓我理一下思路。
先碰到一個 setTimeout,所以會先設定一個定時,在定時結束後將傳遞這個函數放到任務佇列裡面,因此開始肯定不會輸出 1 。
然後是一個 Promise,裡面的函數是直接執行的,因此應該直接輸出 2 3 。
然後,Promise 的 then 應當會放到目前 tick 的最後,但還是在目前 tick 中。
以上是最新的前端面試經驗--圍繞setTimeout的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具