常常在setTimeout或者ajax中产生异步代码执行,执行的是回调函数,那么回调函数怎么写呢?这要跟回调函数的函数体内写法有关;

  • 回调函数的函数体内return返回值不是函数;
  • 回调函数的函数体内return返回值是函数;
    分析一下代码的执行过程:
function callback () {console.log('执行callback函数')return function () {console.log('我是callback函数的返回值');}
}
function result() {console.log( a );
}
var a = 0;
setTimeout(result, 200); // 1
setTimeout(callback, 200); // 执行callback函数
setTimeout(callback(), 200); // 执行callback函数   我是callback函数的返回值
a++;

setTimeout启动定时器,当达到预定时间时,宿主环境的事件循环机制将回调函数放入JS引擎的任务队列中执行或者等待执行;那么在setTimeout中如何书写回调函数呢?这里要根据回调函数的返回值来看:

  • 回调函数的函数体内return返回值不是函数;
    如果是这种情况,回调函数写清楚函数名,如果有参数,后面加(arg)带上arg参数即可;
  • 回调函数的函数体内return返回值是函数;
    如果返回值是函数,回调函数写函数名,则只执行回调函数,函数名后加()则除了执行回调函数,也会执行回调函数返回的函数,不管(arg)是否为了传递参数,作为返回值的函数也会执行;这里还有个重要机制,函数名后加()代表函数调用,因此,回调函数会同步被调用,作为返回值的函数会异步调用;因此,如果把上文代码这样写:
setTimeout(callback(), 2000); // 执行callback函数(立刻输出)   我是callback函数的返回值(2秒后输出)

所以,在用回调函数时要注意,写回调函数名,或者加()带参数时,判断回调函数是否返回值是函数,这一点很关键。总之,函数名后加()就会被同步调用,因此要想异步调用,要避免加();如果带参数异步调用,则要将调用的函数A封装在另一个函数B中,函数A作为函数B的返回值,这样来带参数异步调用函数A。

在setTimeout或者ajax等异步方法中回调函数的写法与调用相关推荐

  1. JS中回调函数的写法

    <!DOCTYPE HTML>  <html> <head>   <meta charset="GBK" /> <title& ...

  2. 彻底理解JavaScript中回调函数 (推荐)

    在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...

  3. html js 回调函数,js中回调函数的学习笔记

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你" ...

  4. C++中回调函数(CALLBACK)初探

    C++中回调函数(CALLBACK)初探 简介 对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理.本文将要解释什么是回调函数.它们有什么好处.为什么要使用它们等等问题,在开始之前 ...

  5. javascript中回调函数的理解和应用

    一. 什么是回调函数? 被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数. function f1(fn) {let a =1;console.log(a,'a' ...

  6. js中回调函数的理解 举例说明js回调函数

    初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is passed as an arg ...

  7. 有关JavaScript中回调函数的所有内容!

    作者:Shadeed 译者:前端小智 来源:dmitripavlutin 点赞再看,微信搜索**[大迁世界],B站关注[前端小智]**这个没有大厂背景,但有着一股向上积极心态人.本文 GitHub h ...

  8. 对于Python中回调函数的理解

    关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...

  9. Visual C++中回调函数使用的变身大法

    对于回调函数的编写始终是写特殊处理功能程序时用到的技巧之一.先介绍一下回调的使用基本方法与原理. 1.在这里设:回调函数为A()(这是最简单的情况,不带参数,但我们应用的实际情况常常会很复杂),使用回 ...

最新文章

  1. 不舍得卸载!推荐8个私藏APP,每一款都堪称精品
  2. 机器学习如何帮助企业高效地管理数据?
  3. 团购市场分析:赶集网 团购数据处理过程【笔记】
  4. RabbitMQ学习总结(2)——安装、配置与监控
  5. FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解...
  6. 解决VirtualBox错误:“FATAL:No bootable medium found!”
  7. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
  8. Netty 5.X 官方指南翻译版7
  9. 数组为什么可以使用linq查询
  10. Php wordpress安全性,使用 .htaccess 提高 WordPress 的安全性和可用性
  11. TOAD 调试存储过程的方法
  12. 计算机网络科研项目申请书,唐乾利:如何进一步完善医药类科研课题申请书
  13. 前端开发hr面试试题
  14. 列举1990年到2000年间的闰年
  15. 分享史上java最牛逼 最简短的代码
  16. 使用Telerik控件搭建Doubanfm频道部分
  17. python 异步爬取必应搜索结果
  18. [VB.net]绘制具有渐变颜色和防锯齿字体的标题
  19. 数据结构(c语言版 第二版 严蔚敏)第一张绪论笔记
  20. 【网络】什么是最大传输单元 ( MTU)|MTU 优化

热门文章

  1. HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲
  2. 一站式数字藏品收款系统开发解决方案
  3. 毕业找前端开发工作被拒没经验怎么办?
  4. 怎样建设一个公司网站?(详细介绍)
  5. 关于文件夹的手动隐藏和恢复
  6. 【增量学习】综述解析:A continual learning survey: Defying forgetting in classification tasks
  7. 如何调教ChatGPT
  8. 浅谈设计模式-依赖倒转(倒置)原则
  9. 你想拥有一台可以水下通话的手机吗?
  10. 中国地质大学英语语音学习笔记(五):英语连读——相邻两元音读音(词间或词内)的连读方法和辅音加半元音(词间或词内)的连读技巧