1,异步(什么是异步,异步出现的原因, 异步解决的问题,如何实现异步,什么时候需要异步模式。)
JavaScript是顺序执行的函数,同一个js文件中的函数不可能同时执行,函数执行时间的先后导致异步(现在和未来)。 异步的实现方式:回调函数----> Promise ---->Generator生成器函数
2,回调函数
回调函数是异步的基本单元,setTimeout是最常见的回调函数,JavaScript允许函数作为参数使用,这为回调函数的定义和使用提供了一定的便利。回调出现的问题:控制反转,调用第三方(自己写的或者别人写的)API,执行第三方API的流程,执行过程不可控。
控制反转(inversion of control),也就是把自己程序一部分的执行控制交给某个第三方。在你的代码和第三方工具(一组你希望有人维护的东西)之间有一份并没有明确表达的契约。
3,Promise (定义,相对回调解决的问题以及怎么解决的,优点特点,)
JavaScript是单线程语言,现在执行和将来执行导致异步。“将来一定会执行”的对象为Promise,也可以理解为包含信任的回调函数。Promise.resolve(...)传入非Promise、非thenable的值,返回一个以传入值填充的Promise对象。该方法很好的解决了Promise的信任问题。
THENABLE:识别 Promise(或者行为类似于 Promise 的东西)就是定义某种称为 thenable 的东西,将其定义为任何具有 then(..) 方法的对象和函数。我们认为,任何这样的值就是Promise 一致的 thenable。
4,Generator生成器函数(iterator以及两者间关系,生成器函数定义,与一般函数的区别,)
iterator(遍历器、迭代器):为不同的数据结构添加iterator后,即可依次处理该数据结构的所有成员。将iterator看作一种机制(接口)更利于理解,为各种数据结构提供接口,使得数据结构的成员能够顺序排列,利于ES6遍历命令for......of遍历。
Generator函数总是返回一个遍历器对象,ES6规定这个遍历器是Generator函数的实例,并继承Generator函数的Prototype对象的方法。
Generator函数保留一般函数的属性与方法定义方式看,在函数名前加*以区别一般函数,函数内部使用yield表达式。
function* generator() { yeild func1(); yeild func2(); }