IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript(6):回调函数 -> 正文阅读

[JavaScript知识库]JavaScript(6):回调函数

  在百度百科中,回调函数的定义就是一个被作为参数传递的函数。
  通俗地理解:我现在写一个函数,里面定义了函数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)

  关键点还在于,回调函数作为参数只有函数名而没有参数列表,这一点的设计真是灵巧。
  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.url
    ? ? let filePath=path.join(__dirname,url)
    ? ? console.log(`正在请求地址:${url},实际对应地址为${filePath}`)
    })
    server.listen(2022,()=>{
    ? ? console.log('服务器正在运行,http://127.0.0.1:2022')
    })

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

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:06:53  更:2022-02-03 01:07:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:46:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码