同步异步的理解

  1. js的同步操作并不是所有的任务一起操作之意。
  2. js的异步操作并不是一个任务执行完另一个任务开始执行。

同步:单线程,就是同一时间只做一件事情。同步操作都会放在主线程中进行。

setTimeout(function(){ 
    console.log(2); 
},0) 
console.log(3)
//1,3,2
复制代码
  1. 第一句是个同步代码,在主线程中进行。
  2. 读取到第二句,是个异步代码,放在浏览器中进行。
  3. 第三句,参考第一句。

所以,异步操作,首先将异步代码放在浏览器中,因为浏览器中是多线程的,返回顺序也就不一样。

简单来说,一个任务不是连续完成的,可以理解为该任务被分成了两段执行,先执行第一段,转而执行其他任务,等做好了准备,转而执行第二段。

比如文件读取,任务第一段是想操作系统发送请求,要求读取文件。然后,程序执行其他任务,等操作系统返回文件,再执行任务的第二段(处理文件)。这种不连续的操作,就叫异步

回调函数

JavaScript对异步编程的实现,就是回调函数,就是把任务的第二段单独写在一个函数里面,等重新执行这个任务的时候,就调用这个函数。

fs.readFile('/etc/passwd', 'utf-8', function (err, data) {
  if (err) throw err;
      console.log(data);
  });
复制代码

测验

console.log(-1);
setTimeout(function(){
      console.log(0);
},0);


setTimeout(function(){
    console.log(1);
},1000);


setTimeout(function(){
console.log(2);
},100);


setTimeout(function(){
    console.log(3);
},0);


setTimeout(function(){
    console.log(4);
},1000);


setTimeout(function(){
    console.log(5);
},1000);


setTimeout(function(){
  console.log(6);
},200)


// -1,0,3,2,6
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享