自检:前端知识清单——执行机制

2019-10-02  本文已影响0人  极奏

前言

题目来自ConardLi的blog
写的是自己的题解,水平有限,所以仅供参考
代码会整合在github,觉得有帮助就给个star吧~

正文

一、Javascript基础

执行机制

1、为何try里面放return,finally还会执行,理解其内部机制

因JavaScript依靠着语句的Completion Record类型,在语句的复杂嵌套结构中,实现各种控制。

因为finally中的内容必须保证执行,所以try/catch执行完毕,即使得到的结果是非normal型的完成记录,也必须要执行finally

2、JavaScript如何实现异步编程,可以详细描述EventLoop机制

异步编程

ES6之前:
ES6:
ES6+:

EventLoop机制:

掘金:这一次,彻底弄懂JavaScript的执行机制

js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。

不是每过ms秒会执行一次fn,而是每过ms秒,会有fn进入Event Queue

3、宏任务和微任务分别有哪些

宏任务:

微任务:

4、可以快速分析一个复杂的异步嵌套逻辑,并掌握分析方法

题目一:

async function async1() {
    console.log("async1 start");
    await  async2();
    console.log("async1 end");
}

async  function async2() {
    console.log( 'async2');
}

console.log("script start");

setTimeout(function () {
    console.log("settimeout");
},0);

async1();

new Promise(function (resolve) {
    console.log("promise1");
    resolve();
}).then(function () {
    console.log("promise2");
});

console.log('script end');

同步队列->微任务->宏任务

输出顺序:
script start
async1 start
async2
promise1
script end

async1 end
promise2

settimeout

async await的代码到底做了些什么,我们可以来写一下



5、使用Promise实现串行

.then调用

6、Node与浏览器EventLoop的差异

暂时不会

7、如何在保证页面运行流畅的情况下处理海量数据

分页,worker

8、冒泡和捕获的机制

你有没有想过,在单击按钮的同时,你也单击了按钮的容器元素,甚至也单击了整个页面。

事件冒泡
IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。

事件捕获
Netscape Communicator 团队提出的另一种事件流叫做事件捕获(event capturing)。其思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于事件到达预订目标之前捕获它。


9、script defer与async

在现实当中, 延迟脚本并不一定会按照顺序执行,也不一定会在 DOMContentLoaded 事件触发前执行, 因此最好只包含一个延迟脚本。
——泽卡斯(Zakas. Nicholas C.). JavaScript高级程序设计(第3版) (图灵程序设计丛书) (Kindle 位置 639-641). 人民邮电出版社. Kindle 版本.

上一篇 下一篇

猜你喜欢

热点阅读