一. 什么是回调函数?

被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。

function f1(fn) {let a =1;console.log(a,'a')fn()
}f1(function() {console.log('callback')  // 1,'a'   callback
})

和普通传参不同的是,回调函数作为实参在一个函数中传递并调用

二. 回调函数的特性

引用调用

调用的位置可以在作为实参传递的那个函数里面,即形参调用。也可以在实参里面调用,无论调用方式如何,引用调用的形参和实参调用是保持一致的。类似于引用数据类型的传参和更改。

形参调用

如上述代码,fn为形参。function() {
console.log(‘callback’)
} 为实参,当fn()形参调用时,实参unction() {
console.log(‘callback’)
}同样也会触发调用

实参调用

实参调用一般存在于回调函数嵌套中,例如

function f1(fn) {let a =1;console.log(a,'a')fn((delay) => {console.log(delay,'delay')})
}f1(function(fn) {fn(111)
})

两者之间的关系

其实,形参和实参的调用概念引用只是为了便于理解,归根结底还是形参的调用,只是参考点不同,例如fn(111)对于f1来讲是实参调用,而对于function(fn){}函数来讲,还是作为形参去调用的。

所以,可以不用纠结于形参或者实参调用,我们只要明白引用调用相互影响这层关系即可。

三. 回调函数有什么作用?

其实,之前写的 手写ES6数组常用方法系列就有用到回调函数,例如可以参考手写ES6数组常用方法(every,some,sort,includes)。

好处主要有两点,
(1)可以在执行一个函数的同时执行另一个函数,且因为另一个函数是作为实参传递,另一个函数是可以自定义的;

(2)除了主函数可以处理数据外,回调函数也可以进一步处理数据,并返回想要的结果。

例如Vue升级后的Vue3.x就有大量的回调函数应用场景,可见回调函数对于方法的集成是很有帮助的。

例如watch(侦听器),我们可以利回调函数做个简单的示意

function watch(userCount, fn) {// to do soming to formatlet foramtValue = userCount + 1fn && fn(foramtValue)
}
watch(100, (val) => {console.log(val,'val')
})

javascript中回调函数的理解和应用相关推荐

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

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

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

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

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

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

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

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

  5. js回调函数的理解(轉)

    js回调函数(callback)理解Mark!讲之前说一句function say(){alert(,,,,,,,,)}var say=function (){alert(,,,,,,,)}var s ...

  6. 回调函数举例ajax,通过回调函数的理解来进一步理解ajax及其注意的用法

    一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...

  7. JavaScript:回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  8. MATLAB中的函数句柄 理解

    MATLAB中的函数句柄 理解 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/kevinhg/article/details ...

  9. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

最新文章

  1. python4delphi_python4delphi 安装
  2. 数据治理(Data Governance)
  3. BGP no-advertise
  4. 引导类加载器 Bootstrap ClassLoader
  5. Spring Cloud Alibaba —— Sentinel 入门
  6. Python学习笔记之类(一)
  7. Android 开发笔记 ProgressDialog的Back健关闭
  8. [转载]数据库外键的使用
  9. Python_Python处理JSON文件
  10. NLP︱LDA主题模型的应用难题、使用心得及从多元统计角度剖析
  11. 搞清楚p问题、NP问题、NP完全问题和NP难问题
  12. java实验报告9 面向接口编程
  13. php layim 图片正则替换,用正则表达式批量替换图片路径方法
  14. Anima2D动画简单理解
  15. c盘满了但是d盘有空间如何扩容-windows
  16. 清华北大教授联袂推荐的好书:《区块链:金融应用实践》
  17. 树形结构的数据与一维数组数据的相互转换
  18. Signature|privileged permissions not in privapp-permissions whitelist异常处理
  19. PyQt5第一部分-窗口类:QWidget, QDeskWidget, QTabWidget, QMainWindow, QDialog
  20. 对话高新兴总裁侯玉清:安防企业的翻身之战

热门文章

  1. 内部员工说说北塔软件怎么样
  2. github上docker镜像创建容器
  3. 2017 CVTE Windows开发一面 3.7
  4. 如何在google colab创建/配置torch 0.3.1环境
  5. JS基础知识(总结归纳)(常识笔记)
  6. 【风控系列】4. 行之有效的风控业务目标
  7. 工程师讲解 | T507实现SPI转CAN 全过程
  8. 昨天刷爆朋友圈的趣味翻译,你看到了吗?
  9. 【GitHub开源】动漫肖像魔法
  10. windows无法访问指定设备路径或文件_你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证...