在百度百科中,回调函数的定义就是一个被作为参数传递的函数。
  通俗地理解:我现在写一个函数,里面定义了函数A,那么函数A就是回调函数。
  以前我认为JavaScript不过是一门在浏览器端执行的简单脚本语言,我只要会写会读就行了,正经写程序还是要靠C++\C#\Java等高级语言来做。看了回调函数和它的特点特别是看了一些JavaScript函数的原型才明白JavaScript虽然简单,可是这门语言设计得真是巧妙,深入掌握并不容易。
  我的理解:回调函数就是定义了一定要(回来)执行的函数,至于什么时候执行、怎么执行、具体的执行内容是什么,解释器不用理会,到了要执行的时候,你把它放到执行队列里就行了。
  回调函数是JavaScript的精华之一,它给JavaScript这门语言增添了很多的精巧和奥妙。
  比如:
  1、JavaScript作为一门编程语言本身只支持单线程,怎样支持多线程编程呢?
  JavaScript操作的是BOM和DOM,为了避免处理冲突,作为编程语言它本身是单线程是可以理解的,但作为宿主的浏览器是支持多线程的,那么它就可以通过回调函数在浏览器的支持下实现多线程。
  比如Jquery处理鼠标单击事件的定义是:$(selector).click(function)
  这里的click(function)是回调函数,同样对于鼠标的单击事件有更广泛的定义:$(selector).on(event,childSelector,data,function)
  这里的function也是回调函数,意思是说,这个函数是一定要执行的,具体什么时候执行不确定,当执行到这行代码的时候,浏览器就把函数的具体实现放到执行队列去排队执行就好了,这行代码就算过去了,浏览器可以继续执行下一行的代码了。
  单线程容易造成阻塞,因为必须等一行代码执行完了才能继续执行下一行代码,如果某一行代码很耗时,那么给用户的感觉就是浏览器卡顿,而有了回调函数的这一执行机制,就有效地避免了这种拥塞,给用户的感觉就是多线程的执行环境,其实是浏览器的多线程和JavaScript的回调函数执行机制联合起了作用。
  2、编程的函数实现了某些功能,可是这些函数的具体实际的应用依赖于某些特定的需求,这些需求我现在不清楚,怎样让函数去契合这些需求呢?
  举例来说,数组排序很简单:

  var arr=[92,12,29,24]    arr=arr.sort()console.log(arr)

  执行输出为:[12, 24, 29, 92]
  默认的就是从小到大的升序排序,针对包含了数字的数组。
  问题是数组也可能是字符串或者是时间,又或者我想要的是从大到小的排序呢?这些都是开始无法确定的。
  看sort的函数说明:
  method:sort(function):array
  中间的参数是个(回调)函数,这为程序功能提供了更多的实现。
  如果需要是降序排序:

    var arr=[92,12,29,24]function compareNumber(a,b){return b-a}arr=arr.sort(compareNumber)console.log(arr)

  如果是字符串数组呢?现在有四个时间的字符串,我想按照月份从小到大排序:

    arr=['20000901','20080401','20211105','20180103']function compareMonthChar(a,b){return Number(a.substr(4,2)) - Number(b.substr(4,2))}arr=arr.sort(compareMonthChar)console.log(arr)

  关键点还在于,回调函数作为参数只有函数名而没有参数列表,这一点的设计真是灵巧。想一想C语言中的指针的灵活使用和C#中委托就理解了这个设计的意图。
  3、软件开发无非就是输入、处理、输出这些,有些函数实现了输入,具体的处理和输出需要未来的开发者去实现,怎样做到这一点呢?
  比如在Node.js的Web应用开发中,获取了访问者的数据,他的连接和一些访问参数,怎样响应呢?
  使用回调函数来衔接。
  看Node.js中的函数设计:

  var express = require('express')var app = express()app.get('/', function (req, res) {res.send('hello world')})app.listen(3000)

  这里的函数 function (req, res) {  res.send('hello world') }就是回调函数。

    const http=require('http')const fs=require('fs')const path=require('path')const server=http.createServer()server.on('request',(req,res)=>{const url=req.urllet filePath=path.join(__dirname,url)console.log(`正在请求地址:${url},实际对应地址为${filePath}`)})server.listen(2022,()=>{console.log('服务器正在运行,http://127.0.0.1:2022')})

  这里的(req,res)=>{}也是回调函数。

JavaScript(6):回调函数相关推荐

  1. 如何用JavaScript的回调函数做出承诺

    by Adham El Banhawy 由Adham El Banhawy 如何用JavaScript的回调函数做出承诺 (How to make a Promise out of a Callbac ...

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

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

  3. ajax回调函数有时成功有时失败,javascript - Ajax 回调函数行为随机。我做错了什么?...

    我有以下行为随机的 ajax 函数.有时会显示警报 success finally.在其他情况下,第二个警报是 显示 Failure: my status is 500. promptId 从调用函数 ...

  4. javascript之回调函数小知识

    Javascript异步编程方法------"回调函数" 这是异步编程最基本的方法. 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. ...

  5. javascript~callback回调函数

    函数是对象,所以它可以作为一个参数传递给其他函数. 回调函数作为一个参数传递给其他函数时是没有括号的,只有函数名:使用括号表示立即执行回调函数callback.我们只希望传递一个函数的引用,让其他函数 ...

  6. javascript的回调函数 同步 异步

    后一个任务等待前一个任务结束再执行.程序执行顺序与任务排列顺序一致的,同步的. 参考: http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%B ...

  7. javascript的回调函数

    回调函数概念:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数. JS Api 里这样解释:A c ...

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

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

  9. JavaScript:回调函数(callback)

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

  10. javascript利用回调函数解决异步困扰

    虽然已经存在promise,StratifiedJS等工具用来解决回调地狱,但是讲真,我觉得他们也并没有让代码的可读性大大增强,而且在回调函数的嵌套次数有限的情况下也不至于成为一个"地狱&q ...

最新文章

  1. opencv-学习笔记(5)形态学转变
  2. java常见异常说明汇总
  3. C#中Math的使用总结
  4. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
  5. android 定制ui,AndroidSDK-UI定制
  6. java jvm虚拟机_Java虚拟机(JVM)简介
  7. 旷视周而进:人脸识别简史与距离对齐技术的应用
  8. linux下代码写错了怎么更改_linux系统下poll和epoll内核源代码剖析
  9. Verilog HDL 出租车计费器实现
  10. 小米高级交互设计师:产品设计的八个原则
  11. uni-app教程支付php,uni-app IOS app微支付、支付宝整合记录
  12. 2017年工作总结--初出茅庐
  13. 十大思想实验(思维风暴)
  14. opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
  15. UI: 网易新闻实现
  16. Oracle分区表概述、分类、使用方法及注意事项
  17. VS Code按住ctrl不能跳转到定义/函数(Python)
  18. vmware虚拟机挂载ISO镜像并创建本地yum源
  19. U盘如何恢复正常存储U盘
  20. 政务云异构虚拟化平台迁移案例

热门文章

  1. 严小样儿教你做数据分析(1)——Excel做一元线性回归预测和相关系数计算
  2. 高mysql千万级大数据SQL查询优化几条经验
  3. IDEA主题设置更换
  4. php第三方微信app支付接口开发,PHP开发APP微信支付接口
  5. html input trim,javascript – jQuery:$.trim()在input.val()中的单词之间的空格
  6. word整个表格首行缩进_word表格怎么首行缩进 word表格内容缩进
  7. 【实习周报】2019年5月 前端开发实习工作周报汇总
  8. python批量生成excel文件_实例1:用Python自动批量生成Excel档物料标签
  9. matlab 计算 fdr,基因富集分析(p值,q值和FDR值)
  10. 第六篇:uniapp的rpx响应式px样式