前端面試手寫練習 - once
- 文章發表於
問題
once 顧名思義,是一個可以確保某個函式只會被執行一次的工具函式。實作一個 once 函式,當多次調用時,只有第一次調用會執行函式,後續調用將會忽略。
function once(func: Function): Function
範例
有些資源 (像是圖片或是資料庫連線) 的載入可能會花費較長的時間,我們可以透過 once 函式來確保這些資源只會被載入一次。
const loadResource = once(() => {console.log('資料載入完成')})loadResource() // '資料載入完成'loadResource() // 不會有任何輸出
練習區
在了解問題後,可以嘗試先寫下您的思路,再到下方的練習區域實際寫出程式碼。
筆者思路
- 這是一個簡單的閉包問題,跟 memorize 的概念非常相似。
- 我們可以在 once 函式內部定義一個變數
executed
來追蹤函式是否已經被執行過。同時定義一個變數result
來儲存函式的結果。 - 如果函式還沒有被執行過,執行函式並將
executed
設為true
。 - 如果函式已經被執行過,我們就直接返回結果。
筆者解答
function once(func) {let resultlet executed = falsereturn function (...args) {if (!executed) {executed = trueresult = func.apply(this, args)}return result}}
相關題目
如果您喜歡這篇文章,請點擊下方按鈕分享給更多人,這將是對筆者創作的最大支持和鼓勵。