1、什么是单线程,和异步有何关系?
答:js就是单线程语言,但是单线程运行存在阻塞(alert就会阻塞后面程序运行),同一时间只能做一件事,而一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现"假死"。而类似问题的解决方案:异步,异步代码不进入主线程,而是进入任务队列,当任务队列执行完成后,就会在任务队列中添加一个事件;
2、什么是event-loop?
答:本身是计算机的一种运行机制,而js就是运用这种机制来解决单线程运行带来的一些问题。event loop用于等待和发送消息和事件。简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"。
3、目前js解决异步的方案有哪些?
答:callback、Promiss、Generator、asnyc/await;
4、对于Promise的标准及理解?
答:一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)、完成态(Fulfilled)和操作失败(Rejected);Promise对象的状态改变只有两种可能: 1.pending ——> fulfilled 2.pending ——> rejected;一个 promise 必须提供一个 then 方法以访问其当前值、终值和据因;
5、callback、Promiss、Generators、async/await?
答:在async/await之前,一般有三种方式写异步代码;callback、Promiss(es6)、Generators(es6);但这三种写起来都不够优雅,ES7做了优化改进,本质上是Generators(Generator 函数的执行必须靠执行器,所以才有了 co 函数库,而async/await自带执行器)函数的语法糖,async/await相比较Promise 对象then 函数的嵌套, Async/Await 写出同步风格的代码同时又拥有异步机制,更加简洁,逻辑更加清晰。async函数返回的是一个Promise对象;