As a Interviewer

1,函数声明与函数表达式的区别是什么?

考察点:函数声明提升

答:函数声明在函数调用时可以提前调用,存在“函数声明提升”,而函数表达式则不行。

2,回调函数和promise在JS的事件循环机制上有什么本质上的区别?

答:回调函数的callback是等待异步回调有响应后,将回调函数插入事件循环队列的末尾,等待主进程调用。
promise的then

3,什么是单线程,和异步有什么关系?

答:单线程:只有一个线程,同一时间只能做一件事情。
JS单线程是为了避免DOM渲染冲突
浏览器需要渲染DOM,JS可以修改DOM结构,JS执行时候,浏览器DOM渲染会停止,两段JS不能同时执行(都修改DOM就冲突了),webworker支持多线程,但是不能访问DOM。异步就是来解决这个问题的。

4,什么是event-loop(事件循环)?

关键词:主进程+异步队列
答:事件轮询,JS实现异步的具体解决方案。同步代码直接执行,异步函数先放在异步队列中,待同步函数执行完成后,轮询执行异步队列的函数。

5,是否用过jQuery的Deferred

答:deferred:延迟的意思。Deferred对象是jQuery1.5之后引入的针对异步的解决方案之一。jQuery的Deferred对象符合开放-封闭原则,对扩展开放,对修改封闭。promise和Deferred的区别,用Deferred生成的promise对象(deferred.promise())不能使用resolve,reject去修改状态,只能监听使用then,done,fail等方法。

6,Promise的基本使用和原理

答:Promise的三种状态:pending,fulfilled,rejected,状态不可逆。Promise有resolve,reject,then,catch,race,all等方法。then函数中没有明文返回promise实例,则返回之前的promise实例。
异常的捕获(error和reject的捕获),可以使用catch去统一捕获,promise可以使用链式操作执行,不用写多个callback函数。

7,介绍一下async/await(和Promise的区别,联系)

答:async/await是最直接的同步写法写异步函数,使用await,函数必须有async标识,await后面跟的一定是一个Promise实例,使用了promise,但是没有和promise冲突,没有取代promise,只是同步的一种写法,没有了回调函数的写法。

8,总结一下当前JS解决异步的方案

答:当前JS异步解决方案有:
1,异步回调 2,Promise对象 3,generator生成器 4,async/await,抛弃回调函数的写法 5,事件监听 6,发布订阅等

你可能感兴趣的:(As a Interviewer)