主题
JS 基础 ( ES6)
1. let ,const
let
产生块级作用域 ( 通常配合 for 循环或者 {} 进行使用产生块级作用域), const
申明的变量是常量 ( 内存地址不变)
2. Promise
这里你谈 promise
的时候, 除了将他解决的痛点以及常用的 API
之外, 最好进行拓展把 eventloop 带进来好好讲⼀下, microtask
(微任务)、 macrotask
(任务) 的执行顺序, 如果看过 promise
源码, 最好可以谈⼀谈原生 Promise 是如何实现的 。 Promise
的关键点在于 callback
的两个参数,⼀个是 resovle
,⼀个是 reject
。还有就是 Promise
的链式调用 ( Promise.then()
,每⼀个 then
都是⼀个责任⼈)
3. Generator
遍历器对象生成函数, 最大的特点是可以交出函数的执行权
function
关键字与函数名之间有⼀个星号;- 函数体内部使用
yield
表达式,定义不同的内部状态; next
指针移向下⼀个状态
这里你可以说说 Generator
的异步编程, 以及它的语法糖 async
和 awiat
,传统的异步编程 。 ES6
之前,异步编程大致如下
- 回调函数
- 事件监听
- 发布/订阅
传统异步编程方案之⼀: 协程, 多个线程互相协作, 完成异步任务。
4. async 、await
Generator
函数的语法糖 。有更好的语义 、更好的适用性 、返回值是 Promise
。
async => *
await => yield
js
// 基本用法
async function timeout(ms) {
await new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function asyncConsole(value, ms) {
await timeout(ms);
console.log(value);
}
asyncConsole("hello async and await", 1000);
5. AMD , CMD , CommonJs, ES6 Module:解决原始无模块化的痛点
AMD
:requirejs
在推广过程中对模块定义的规范化产出,提前执行,推崇依赖前置CMD
:seajs
在推广过程中对模块定义的规范化产出,延迟执行,推崇依赖就近CommonJs
:模块输出的是⼀个值的copy
, 运行时加载,加载的是⼀个对象(module.exports
属性), 该对象只有在脚本运行完才会生成ES6 Module
:模块输出的是⼀个值的引用,编译时输出接口,ES6
模块不是对象, 它对外接口只是⼀种静态定义,在代码静态解析阶段就会生成。