javascript - js的异步编程和回调函数之间的关系?

 傻傻的笑没心没肺wy 发布于 2022-11-23 07:01

看了好几篇文章,还是没能很彻底的搞明白异步编程

http://segmentfault.com/blog/trigkit4/1190000000670467

如这篇说到第一种"异步模式"编程的方法 回调函数

function f1(callback){

    setTimeout(function () {

      // f1的任务代码

      callback();

    }, 1000);

  }
f1(f2);

我的问题就是:如果没有setTimeout,这个还是回调函数还是异步函数么?
包括后面说的几种方式,都有用setTimeout,是否可以理解为使用了setTimeout的就是异步编程??

7 个回答
  • 看了下这篇文章,里面没有解释事件循环等机制,可以看一下篇文章javascript异步编程

    2022-11-23 07:07 回答
  • 如果是同步的,也就是说代码是这样的:

    function f1(callback){
          // f1的任务代码
          callback();
    }
    

    代码2 调用f2同步的同步实现
    那么调用完f1(f2)之后,f2会被立即执行。
    但是你给出的代码是异步的,调用完f1(f2)之后,f2不会被立即执行。
    为啥你把异步和回调搞混了呢,我认为是由于一般人不会写我给出的那段同步代码,如果想调用f2,你就直接调用就行了,干嘛还把它封装到f1函数中呢,显得很没必要了,但是这么写你也不能说语法是错的啊。但是如果你使用异步就不一样了,调用完setTimeout之后,如果你不加个回调,我都无法捕获到setTimeout啥时候执行,我要setTimeout函数处理完成之后要做下一步操作,怎么办?只能加一个回调函数了吧。
    关于异步的详细介绍还可以参见我的博文:http://blog.whyun.com/posts/js/

    2022-11-23 07:07 回答
  • 不是。<--先回答问题,然后来瞎掰掰


    不要扣概念,写你的代码,解决你的问题

    不是说非得先熟读异步编程的4种方法5种模式6个思想什么的才能会异步编程的,那是给“已经会”的人看,让他们“精通”的

    先写一个ajax拉数据反馈在页面上

    然后写一个ajax同时发2个请求,合并结果反馈在页面上

    那就是异步编程

    等你写的系统里有10种不同的ajax请求/加载图片请求,有的串行有的并行,有的需要作为校验阻碍另一个动作,有的动作包含几个不同的请求,还有的需要循环发N个请求,你发现原来你的写法崩溃了完成不了功能了,这时候再来找你现在看的这些资料。

    2022-11-23 07:07 回答
  • 异步和回调没有关系,
    同步的也有很多用回调的,
    回调只是异步传输结果的一个方式,
    只不过是二者同时出现的场合多一点,
    并没有依存关系。

    2022-11-23 07:07 回答
  • js中setTimeout是在所有代码都单步执行完才执行里面的回调函数,可以把settimeout理解成一个事件。

    2022-11-23 07:07 回答
  • 我表哥要去我姑妈家帮我 拿回我的剃须刀

    他拿回来之前 我不能 刮胡子

    他拿回来之前 我可以 洗澡

    剃须刀拿回来之后 我就可以刮胡子

    洗澡拿回我的剃须刀 是异步的

    刮胡子拿回剃须刀的 回调callback

    2022-11-23 07:07 回答
  • 异步编程的含义只有一个:

    你不能在函数返回时,立即获得你想要执行的结果。

    于是,你传入一个callback用以等待任务完成时,把结果告诉你。

    setTimeout(xx,1000) 是模拟1秒后你所需要的指令完成任务告诉你结果的形式。

    2022-11-23 07:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有