浅析异步回调

最原始的写法-同步写法

所有操作同步单线进行

//最原始的写法-同步写法
 
f1(); //耗时很长,严重堵塞
f2(); //f2需要用用到f1
f3(); //导致f3执行受到影响

异步回调

//改进版-异步写法
function f1(callback){
  setTimeout(function () {
    // f1的任务代码
    callback();
  }, 1000);
}
f1(f2); //
f3();

举个例子

//举例
var a=0;
var b=0;
function f1(){
  for(var i=0; i<100000000; i++){
  a += i;
  }
  b = a+1;
  console.log(a);
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1()  //  4999999950000000  这一步拉长了时间
f2()  //  4999999950000001
f3()  //  abc  

需要等f1() f2()执行完后才会输出abc 如果f1()f2()执行时间很长,f3()就会一直延迟

异步

这里因为f1()的执行时间太长,所以将f1异步放到最后去执行

var a=0;
var b=0;
function f1(callback){
  setTimeout(function(){   
    for(var i=0; i<100000000; i++){
    a += i;
    }
    b = a+1;
    console.log(a);
    callback()
  },0)
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1()  // 最后出现,用时很长 4999999950000000
f2()  // 0 
f3()  // abc

因为异步了,在执行f2()的时候,a和b的值都是0,所以f2()最后是0,但这不是我们想要的结果,我们想同时不影响整个执行,又要得到正确的f2()结果

异步回调

var a=0;
var b=0;
function f1(callback){
  setTimeout(function(){
    for(var i=0; i<100000000; i++){
      a += i;
    }
    b = a+1;
    console.log(a);
    callback()
  },0)
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1(f2)
f3() //立刻输出abc 然后过一段时间才输出f1(f2) 4999999950000000 4999999950000001

按这样的步骤理解起来应该就比较清晰了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 一个刚入前端的小菜,虽然以前看到过关于回调的文章,但是呢,理解起来有点费劲啊。当时的脑海里就一个概念。 回调...
    夏风轻语阅读 3,184评论 1 2
  • 同步模式与异步模式 Javascript语言执行环境是“单线程”,一次执行一个任务,并且按照顺序依次执行。但是遇到...
    你好赵大宝阅读 1,085评论 0 0
  • 最近在学习node.js nodeJS的核心之一就是回调。之前理解一直概念不清。所以查了很多资料。以下是分享下个...
    奶爸Mr谢阅读 6,462评论 1 2
  • 为什么会想写一个关于JS的异步的一个系列呢?在不断的学习之中,越发的让我觉得,异步以及原型,可以说是JS最为重要的...
    aboyl阅读 4,044评论 0 1
  • 不系渔舟照月眠,随波浮沉任西东。 幕天席地人极乐,时立潮头唱大风。
    昆成阅读 1,144评论 0 0