❶ 阿里前端面試題(1)——解構/非同步/markdown語法解析
a. 不完全解構,也會成功,不會報錯
b. 只要支持 Iterator 介面,都可以被解構賦值
c. null 可以替代默認值,而成功的解構賦值
d. 解構中不定參數可以出現在除第一個以外的其他位置
e. 解構是先找到同名屬性,然後再賦給對應的變數
f. 默認值可以引用解構賦值的其他變數,但該變數必須已經聲明
(d)
迭代一個對象的屬性
不定參數只能放在最後一個位置
a. 在JavaScript中,任務被分為兩種,一種宏任務(MacroTask),一種叫微任務(MicroTask),setTimeout 屬於微任務
b. setTimeout(func, 500) 會精確的在 500ms 後執行 func
c. Promise、generator、async/await 都是非同步解決方案
d. process.nextTick、Promise 都屬於 node 中的微隊列
e. 瀏覽器的 Event Loop 和 node 的 Event Loop 是不同的,實現機制也不一樣
f. 在 node 中setTimeout 和 setImmediate 執行階段是一致的
(c,d,e)
解析:f 兩者的執行順序要根據當前的執行環境才能確定
(那怎麼知道主線程執行棧為空啊?js引擎存在monitoring process進程,會持續不斷的檢查主線程執行棧是否為空,一旦為空,就會去Event Queue那裡檢查是否有等待被調用的函數)
https://juejin.im/post/59e85eebf265da430d571f89
Markdown 是非常受技術人員喜歡的一種文本格式,請使用 JavaScript 來實現 marked 方法來進行 markdown 文本的 HTML 渲染,可以滿足以下需求:
function marked(str) {
// your code here
}
marked('@@whatever@@').trim() // <p><blink>whatever</blink></p >
marked(' abc @@def@@ ghi ').trim() // <p><em>abc</em> <blink>def</blink> <strong>ghi</strong></p >
marked('@@ cool @@').trim() // <p><blink><strong>cool</strong></blink></p >
可以實現題目中的要求,但是還不能滿足「@@abc」這樣缺少對應字元串的情況