❶ 阿里前端面试题(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”这样缺少对应字符串的情况