Skip to content

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 的异步编程, 以及它的语法糖 asyncawiat ,传统的异步编程 。 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:解决原始无模块化的痛点

  • AMDrequirejs 在推广过程中对模块定义的规范化产出,提前执行,推崇依赖前置
  • CMDseajs 在推广过程中对模块定义的规范化产出,延迟执行,推崇依赖就近
  • CommonJs :模块输出的是⼀个值的 copy , 运行时加载,加载的是⼀个对象( module.exports 属性), 该对象只有在脚本运行完才会生成
  • ES6 Module :模块输出的是⼀个值的引用,编译时输出接口, ES6 模块不是对象, 它对外接口只是⼀种静态定义,在代码静态解析阶段就会生成。