JavaScript 面試常見問題
作者 Aaron Cao · 更新於

預期會考基礎觀念:閉包、事件迴圈、this 綁定、原型,以及用 var、let、const 處理作用域。接著是程式題,例如實作 debounce、展平陣列,或寫一個 promise 工具函式,還有事件委派這類瀏覽器相關主題。資深職缺的面試還會加入 async 模式和效能相關內容。
最常被問到的 JavaScript 基礎觀念有哪些?
JavaScript 的題目清單看似無窮無盡,逐一刷隨機題目是最慢的攻略方式。這一節把範圍收斂到面試官幾乎每一輪都會問到的觀念,讓你的練習真正對應到實際的出題分布。以下五個主題涵蓋了大多數篩選面試:
- 閉包:函式捕獲了什麼、經典的迴圈變數 bug,以及模組模式為何有效。
- 事件迴圈:呼叫堆疊、任務佇列和微任務佇列,以及在一個混合範例中日誌的印出順序。
- this 綁定:預設綁定、隱含綁定、用 call 和 apply 的明確綁定,以及箭頭函式有何不同。
- 原型:沿原型鏈的屬性查找,以及 class 語法編譯後的樣子。
- 作用域:var 與 let、const 的差異、變數提升,以及暫時性死區。
用 == 與 === 的相等性強制轉型、真值判斷,以及 map、filter、reduce 等陣列方法,構成了篩選環節的其餘部分。如果你能在一分鐘內把上面每一項都口頭講清楚,基礎觀念這一關就穩了。
應該練習哪些程式題?
除了觀念題之外,大多數 JavaScript 面試環節還包含一個現場完成的簡短實作題。這類題目其實就那幾種,值得反覆練到每題只要幾分鐘、而不是要試好幾次:
- 實作
debounce和throttle,並說明各自適用的情境。 - 用遞迴和不用遞迴兩種方式展平巢狀陣列。
- 寫一個簡化版的
Promise.all,要求在第一次失敗時就 reject。 - 用 on、off、emit 打造一個小型事件發射器。
- 深拷貝一個物件,並說出你的實作漏掉了哪些情況。
舉例來說,一位應徵中階職缺的前端候選人,可能會先被要求實作 debounce 當作熱身,接著被要求把它接到搜尋輸入框上,並解釋進行中的請求會發生什麼事。真正的考驗在追問環節;面試官會不斷延伸這道題,看看你對這門語言的理解到哪裡為止。
對著會追問、會反駁的面試官大聲練習,才是讓這些內容真正記住的方法;模擬面試頁面介紹了如何進行有計時和追問的練習環節。
瀏覽器和 async 相關問題長什麼樣?
面向瀏覽器的職缺會在語言基礎之上再加一層內容。事件委派是核心:為什麼在父元素上掛一個監聽器勝過在每個子元素上各掛一個、冒泡是如何讓這件事成立的,以及捕獲階段什麼時候才重要。DOM 更新的批次處理、版面抖動,以及什麼會觸發重排,也會出現在偏效能方向的篩選環節中。
Async 相關問題已經收斂成一種固定套路:一段混合了 setTimeout、promise 鏈和 async 函式的程式碼,讓你預測輸出順序。答案取決於微任務與巨集任務的執行順序,面試官在意的是原因,而不只是順序本身。跨越 await 邊界的錯誤處理、promise 鏈式呼叫與巢狀寫法的比較,以及用 Promise.race 讓多個請求賽跑,補齊了這一類題目。
這些環節在程式題、行為面試和系統設計等不同形式中有何差異,面試類型樞紐頁裡有介紹。
怎麼練習才能真正用到正式面試裡?
看答案感覺很有收穫,但實際上幾乎沒用。正式面試是要開口說、有時間限制、還要互動的,所以練習也必須如此。做模擬練習時,一邊打字一邊講解,被追問打斷,還要卡著時間;正是這種壓力,才能讓你把知識變成直覺反應。其他語言和技術棧的專屬題庫收錄在題庫樞紐頁。
說句實話:正式的 JavaScript 面試通常是在共享編輯器裡進行,你的螢幕全程可見,監考評測也會全程錄影。AI 助手是用來事前準備和練習的,不是用在即時共享的螢幕上。至於合法使用即時協助的場景——像是沒有共享螢幕的電話面試,或是你自己的練習環節——SubcueAI 的懸浮視窗只會留在你自己裝置的本機端,不會有機器人加入通話。