es6
var let 和 const 的用法和区别
- 作用域上区别 、let const 块作用域
- const 不允许 在被赋值
- let 、const 不会挂到window上 , 而别 不存在变量提升
修饰器
箭头函数: arguments对象
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.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();
协程是一种程序运行的方式,可以用单线程实现,也可以用多线程实现。
- 协程与普通线程的差异:
普通线程是抢先式的,会争夺cpu资源,而协程是合作的,
next 同一时间,可以有多个普通线程运行,而协程则只有一个在运行,其他协程则处在暂停状态。
for in 和 for of
for..of (es6) 适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象; 它可以正确响应break、continue 和 return语句 如果你想迭代一个对象的属性,你可以用for-in