| generator:
 - `yield`: 暂停代码  - `next()`: 继续执行代码  
 function* helloWorld() {   yield 'hello';   yield 'world';   return 'ending'; }  const generator = helloWorld();  generator.next()  // { value: 'hello', done: false }  generator.next()  // { value: 'world', done: false }  generator.next()  // { value: 'ending', done: true }  generator.next()  // { value: undefined, done: true }  
 - `await / async`: 是`generator`的语法糖, babel中是基于`promise`实现。  ```js async function getUserByAsync(){    let user = await fetchUser();    return user; }  const user = await getUserByAsync() console.log(user) ```  
 18. AST抽象语法树 (Abstract Syntax Tree),是将代码逐字母解析成 树状对象 的形式。这是语言之间的转换、代码语法检查,代码风格检查,代码格式化,代码高亮,代码错误提示,代码自动补全等等的基础。例如: function square(n){     return n * n } 
 通过解析转化成的AST如下图: 19. babel编译原理
    babylon 将 ES6/ES7 代码解析成 ASTbabel-traverse 对 AST 进行遍历转译,得到新的 AST新 AST 通过 babel-generator 转换成 ES5 20. 函数柯里化在一个函数中,首先填充几个参数,然后再返回一个新的函数的技术,称为函数的柯里化。通常可用于在不侵入函数的前提下,为函数 预置通用参数,供多次重复调用。 const add = function add(x) {     return function (y) {         return x + y     } }  const add1 = add(1)  add1(2) === 3 add1(20) === 21 
 21. 数组(array)
    map: 遍历数组,返回回调返回值组成的新数组forEach: 无法break,可以用try/catch中throw new Error来停止filter: 过滤some: 有一项返回true,则整体为trueevery: 有一项返回false,则整体为falsejoin: 通过指定连接符生成字符串push / pop: 末尾推入和弹出,改变原数组, 返回推入/弹出项unshift / shift: 头部推入和弹出,改变原数组,返回操作项sort(fn) / reverse: 排序与反转,改变原数组concat: 连接数组,不影响原数组, 浅拷贝slice(start, end): 返回截断后的新数组,不改变原数组splice(start, number, value...): 返回删除元素组成的数组,value 为插入项,改变原数组indexOf / lastIndexOf(value, fromIndex): 查找数组项,返回对应的下标reduce / reduceRight(fn(prev, cur), defaultPrev): 两两执行,prev 为上次化简函数的return值,cur 为当前值(从第二项开始)数组乱序: var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; arr.sort(function () {     return Math.random() - 0.5; }); 
 
    数组拆解: flat: [1,[2,3]] --> [1, 2, 3] arr.prototype.flat = function() {     this.toString().split(',').map(item => +item ) } 
 浏览器
1. 跨标签页通讯不同标签页间的通讯,本质原理就是去运用一些可以 共享的中间介质,因此比较常用的有以下方法: |