一、同步和异步
1、同步
同步是一条直线上的队列,调用者和被调用者串行执行,同步需要等待返回结果才能继续。
一个任务连续执行。
2、异步
异步不是一条直线上的队列,各走各的。调用者与被调用者并行执行,异步不必等待,一般需要监听异步的结果。
一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。
二、同步调用,异步调用,回调
同步调用是一种阻塞式调用,必须等待上一个任务完成,这样容易浪费系统资源;
异步调用是一种类似消息或事件的机制,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方;
var pf = function (num) { console.log('print: ',num); }; pf(1111); setTimeout(function () { pf(2222); }, 2000); pf(3333); // -----结果----- // print: 1111 // print: 3333 // print: 2222
回调是一种双向调用,被调用方在接口被调用时也会调用对方的接口。在等待某一件事情完成之后,再运行一个函数,回调可以弥补异步函数的缺点,能够让异步函数同步执行。
var data = []; setTimeout(function (){ data.push(1); },2000); console.log(data[0]); // 结果 // undefined
var data = []; var cb = function(){ console.log(data[0]); }; var pushData = function(callback){ data.push(1); callback(); }; setTimeout(function () { pushData(cb); },2000);