JS 渣渣的 自我 提练

107 阅读1分钟

一.什么是闭包?

二.作用域

1.js 作用域有

全局作用域、函数外部 var 或 未定义

局部作用域、函数内部 var

块级作用域、 es6 新概念 let ,es5 因 没有 let, 块外 和 块内 出现相同变量时,会出现变量污染

var a = 1; { var a = 2 }; console.log(a) ;// 2

2.作用域链

当函数被执行时,会从函数内部开始向上查找变量,函数内部找不到变量,则在定义函数的作用域中寻找变量,依次向上

三.原型链

四.运行机制 

参考链接:github.com/Advanced-Fr…

1.任务队列?

主线任务队列一直执行 ,(1)遇到 宏任务 放宏任务队列,(2)遇到微任务追加到微任务队列,主线队列执行完后 ,(3)依次执行微任务队列中的事件 ,且进行(1),(2)直到微任务队列为空时, 浏览器渲染页面

当宏任务队列中,某个宏任务运行时机到时,将宏任务放进主线任务队列 再次按照上述机制运行

2.宏任务(macrotask),及有哪些?

script 整体代码,setTimeout,setInterval,UI交互事件,I/O,MessageChannel,PostMessage

3.微任务(microtask),及有哪些?

Promise.then , await后面的代码是microtask 

async function async1() {
	console.log('async1 start');
	await async2();
	console.log('async1 end');
}
//等价于
async function async1() {
	console.log('async1 start');
	Promise.resolve(async2()).then(() => {
                console.log('async1 end');
        })
}

五、浏览器渲染工作流程 & 重绘(repaint) & 重排(reflow) & 如何优化?

遗留待研究问题:

1.setTimeout、Promise、Async/Await 的区别
2.Async/Await 如何通过同步的方式实现异步
3.node 事件循环