javascript线程部分知识点

2016-10-06  本文已影响0人  edwin_hei
  1. 单线程模型的含义
  2. 消息队列
  3. event loop
  4. 定时器
  5. setTimeout();
  6. setInterval();
  7. 正常任务与微任务
  8. javascript异步执行
  9. promise对象

答案:

  1. 单线程模型指的是javascript只在一个线程上运行,javascript同时只能执行一个任务,其他任务必须排在后面等待执行.
    事实上javascipt只在一个线程上运行,不代表javascript引擎只有一个线程.javascript引擎有多个线程,单个脚本只能在一个线程上运行,其他线程都是在后台配合.
  2. javascript运行时,除了一根运行线程,引擎还提供了一个消息队列(message queue),里面是各种需要当前程序处理的消息,新的消息进入队列的时候,会排在队列的尾端.
    运行线程只要发现消息队列不为空,就会取出在第一位的消息,执行对应的回调函数,进入消息队列的消息,必须有回调函数,否则这个消息就会遗失.
  3. 所谓event loop机制,指的是一种内部循环,用来一轮又一轮的处理消息队列中的消息,即执行对应的回调函数.
  4. javascript提供定时执行代码的功能,叫做定时器,主要由setTimeout()和setInterval()这两个函数来完成.他们向任务队列添加定时任务
  5. var timeId = setTimeout(func|code,delay);
    除了前两个参数,setTimeout还支持添加更多的参数,他们将被传入推迟执行的函数(回调函数).
  6. setIterval()省略...
  7. 正常人任务task与微任务microtask.他们的区别在于,正常任务下一轮event loop执行,微任务在本轮event loop的所有任务结束后执行.定时器是正常任务,promise是属于微任务
  8. 回调函数进行异步执行,事件监听,发布/订阅
  9. promise是commonJS工作组提出的一种规范,目的是为异步操作提供统一接口
    比如,异步操作f1返回一个promise对象,他的回调函数f2写法如下:
(new Promise(f1)).then(f2);

promise对象只有三种状态

异步操作未完成pending
异步操作已完成resolved
异步操作失败rejected
这三种状态只有两种变化途径:
从未完成到失败-->rejected
从未完成到成功-->resolved

Promise对象的生成
ES6提供了原生的Promise构造函数,用来生成Promise实例

var promise = new Promise(function(resolve,reject){
  //  异步操作的代码
  if(成功){
    resolve(value);
  }else{
    reject(error);
  }
});
上一篇下一篇

猜你喜欢

热点阅读