es6

  • var let 和 const 的用法和区别

    • 作用域上区别 、let const 块作用域
    • const 不允许 在被赋值
    • let 、const 不会挂到window上 , 而别 不存在变量提升
  • 修饰器

  • 箭头函数: arguments对象

    箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,supernew.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
    引入箭头函数有两个方面的作用:更简短的函数并且不绑定this。
    不绑定arguments
    

    
    使用 new 操作符 // 报错 consttructor
    使用 prototype 属性 // undefined
    使用 yield 关键词  //
    
    
  • for of 、 for in 、 for await of

    for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
    
    
  • import 和require的方式的区别 (es6的方式和commonJs的模式)

    IIFE立即执行函数
    
    commomJs  require  (node 默认方式)
    
    AMD (异步加载)、CMD(同步加载) 记载方式
    
    ES Module  .cjs .mjs
    
  • promise的用法, 内部实现原理

    Promise 也还是使用回调函数,只不过是把回调封装在了内部,使用上一直通过 then 方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些。

    //极简的实现
    class Promise {
        callbacks = [];
        constructor(fn) {
            fn(this._resolve.bind(this));
        }
        then(onFulfilled) {
            this.callbacks.push(onFulfilled);
        }
        _resolve(value) {
            this.callbacks.forEach(fn => fn(value));
        }
    }
    
    //Promise应用
    let p = new Promise(resolve => {
        setTimeout(() => {
            console.log('done');
            resolve('5秒');
        }, 5000);
    }).then((tip) => {
        console.log(tip);
    })
    
  • 对async、await的理解,内部原理

    async 是Generator函数的语法糖,并对Generator函数进行了改进

    • async的实现就是将Generator 函数和自动执行器,包装在一个函数里。
    • 更好的语义
    • 更广的适用性
    • 返回值是Promise
  • generrator

    // Generator函数语法:重点是*和关键字yield
    function* helloWorldGenerator() {
      yield 'hello';
      yield 'world';
      return 'ending';
    }
    var hw = helloWorldGenerator();
    

    协程是一种程序运行的方式,可以用单线程实现,也可以用多线程实现。

    • 协程与普通线程的差异:
    1. 普通线程是抢先式的,会争夺cpu资源,而协程是合作的,

    2. next 同一时间,可以有多个普通线程运行,而协程则只有一个在运行,其他协程则处在暂停状态。

  • for in 和 for of

    for..of (es6)
     适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象;
     它可以正确响应break、continue 和 return语句
    如果你想迭代一个对象的属性,你可以用for-in