# JS(5/10) Day 19 五倍紅寶石(第八屆共筆)(2021/7/22) ## Event Loop: JS 是單執行緒的程式,使用的資料結構為 stack 堆疊(後進後出)。 引擎:用來將我們寫的 code 轉成讓機器看得懂的語言。 JS 本身會有一個,而 WebAPI 也會有一個,每個 WebAPI 的引擎不同,最有名的是 chrome 的 V8 引擎。 有的函式如 setInterval 、 setTimeout 不是原本 JS 的引擎有的函式,執行時會先跑到 JS 的 stack 裡 ,接著馬上跑到 WebAPI 執行。 再來會跑到 Callback Queue 裡排隊,等到 stack 的東西執行完再執行 Queue 裡的函式。(一般的 Queue 稱作 Macrotask Queue) 其中有的函式會被歸類在 Microtask Queue 當中,他們有特權、是高等的 Queue,會比一般在 Queue 執行的 task 還更優先執行,甚至可以用函式把 Macrotask 變成 MicroTask。 細節: [JS 原力覺醒 Day15 - Macrotask 與 MicroTask](https://ithelp.ithome.com.tw/articles/10222737) [MDN:Using microtasks in JavaScript with queueMicrotask()](https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide) ## Debug: 有兩種用法: 1. console.log() 檢查 2. 先在程式碼內想要檢查的位置打debugger => 打開網頁檢查 => 切換到Source => 按F9 (Step) 檢查,或是點前面的行數插入中斷點(break point)也可以檢查。 ## ES6 後出現的好用高階函式: 如果要重複使用就在函式外宣告函式。 不用的話就弄成匿名函式寫在函式裡面,執行完就不見了。 ### map: 自動帶入陣列裡的元素,用**函式**對**每個元素**做事情,並**收集成一個新陣列**,回傳值 = 新陣列。 ### forEach: 用**函式**對**每個元素**做事情,**不會變成新陣列**,回傳值 = undefined。 ### filter: 過濾器,條件成立的就留下來,並**收集成一個新陣列**,回傳值 = 新陣列。 ### reduce: 將陣列的每個元素傳到 callback 進行運算,並**回傳一個單一值**。 歸納、簡化,**一般用來加總數值**。 reduce( (累加值acc,目前值currentValue), 起始值 = 第一輪的 acc ) 要注意 reduce 本身及他的 callback 都有**兩個**參數要帶入。 起始值沒給的話會直接將第一個數當成起始值,currentValue 會從第二個數開始拿。 **每一輪結束後的 return 值是下一輪的 累加值acc**。 ## recursion遞迴: 自己呼叫自己,function 內部需設定好,不然會造成 overstack 的狀況。 [斐波那契數](https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0)就是一種遞迴,面試可能會考。(兔子生兔子題) 狀況題: const a 執行完會出錯 => 宣告常數一定要連同值一起給 --- ###### tags: `JavaScript`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up