Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >javaScript回调函数

javaScript回调函数

作者头像
用户6167509
发布于 2019-09-04 02:25:42
发布于 2019-09-04 02:25:42
3.6K10
代码可运行
举报
文章被收录于专栏:一路向前端一路向前端
运行总次数:0
代码可运行

一、概念

回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

咋一看回调函数的概念,可能并不能立即理解什么是回调函数。通俗的讲,回调函数就是以函数作为参数传给另一个函数执行。比如:有一个函数A,函数B, 将A函数作为B函数的参数,然后在B函数里执行A函数,这就是最简单的回调。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var A = function(){
    console.log("我是回调函数A。");
};

var B = function(callback){
    console.log("我是主函数B内的代码。");
    callback();
};

B(A);

这下大伙应该能理解什么是回调了吧。估计大伙会想,这样的回调有意义吗?把A函数的代码直接写到B函数里面不是更好吗? 如果在实际项目里这样写回调真的是糟糕透了。往下看,了解回调是如何应用的。

二、同步回调和异步回调

什么,回调不是异步的吗?仔细看看上面的例子,大家就能明白,回调不一定都是异步的,他有同步和异步之分。上面的示例就是一个同步回调, 所以我不想在过多的解释什么是同步回调,接下来,我们看看什么是异步回调。

由于 JS 是单线程的,一旦我们要执行一个长耗时的任务时,如果一直单线程的堵塞下去会导致程序的等待时间过长而使页面失去响应,非常影响用户体验。 为了解决这样的问题,我们就可以使用异步回调。将耗时的任务扔给异步去做,做好了再通知下我们做完了,我们拿到数据继续往下走。

下面是 ajax 异步请求的部分代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var xhr;
......

xhr.onreadystatechange = function(){
    if(xhr.readystate === 4 && xhr.status === 200){
        //do something
    }
}

当浏览器发起 ajax 请求的时候,会单开一个线程发起 http 请求,这样就能把耗时的 http 请求独自运行。在请求的过程中 readystate 的值会不断的变化,对应着不同的请求状态。大家看看 jquery 对 ajax 的封装就能明白,它就是根据 readystate 返回的状态,执行不 同的回调,最常用的两个回调应该是 success 函数和 error 函数。

异步回调的应用,如下,有 A 和 B 两个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//一般情况下,应该是这样的

A();
B();

//当 A 函数是一个长耗时任务时,为了解决 A 函数长时间阻塞页面问题
//可以将 B 函数作为 A 函数的回调执行

function A(callback){
    setTimeout(function () {
        // A 的任务代码
        callback();
    }, 3000);
}

AB;

因为 JS 是单线程的,所以异步回调也不是真正意义上的异步,它只不过是一个伪异步执行,它通常利用定时器和条件判断来伪装异步执行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
最后那个代码有问题吧,你把callback放到settimeout里面,他是要等到A的代码执行完才执行的。
最后那个代码有问题吧,你把callback放到settimeout里面,他是要等到A的代码执行完才执行的。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
JS基础——异步回调
一个刚入前端的小菜,虽然以前看到过关于回调的文章,但是呢,理解起来有点费劲啊。当时的脑海里就一个概念。
一个会写诗的程序员
2018/08/17
4.3K0
JS基础——异步回调
JavaScript 如何用回调实现异步操作
在 JavaScript 中,异步编程是实现高效非阻塞操作的关键。为了理解 JavaScript 是如何通过回调函数实现异步操作的,我们需要深入探讨一些基础概念和机制。这个解释会涉及到 JavaScript 的事件循环、回调函数的定义和使用,以及一些具体的异步操作的例子。
8808.tw
2024/08/20
1650
js异步处理方案
回调函数是最早的解决异步编程方法 原生ajax和setTimoue都是利用回调函数,在未来某一时刻执行指定方法
刘嘿哈
2022/10/25
2.8K0
浏览器工作原理 - 页面循环系统
每个渲染进程都有一个主线程,并且主线程很忙,既要处理 DOM,又要计算样式,还要处理布局,同时还要处理 JavaScript 任务及各种输入事件。要让这么多不同类型的任务在主线程中顺利执行,需要一个系统来统筹调度这些任务 —— 消息队列和事件循环系统。
Cellinlab
2023/05/17
6880
浏览器工作原理 - 页面循环系统
前端数据获取之Ajax与Fetch (一)
Ajax,读作”阿贾克斯“,这个是每一个web开发者必掌握的一门技术,现在咱们打开一个网页,页面上数据多多少少都会有它的一些参与,来获取数据,但也并不是所有的数据都是通过它来取到的。
用户1462769
2019/08/12
1.8K0
前端数据获取之Ajax与Fetch (一)
【JS】239-浅析JavaScript异步
一直以来都知道 JavaScript是一门单线程语言,在笔试过程中不断的遇到一些输出结果的问题,考量的是对异步编程掌握情况。一般被问到异步的时候脑子里第一反应就是 Ajax, setTimseout...这些东西。在平时做项目过程中,基本大多数操作都是异步的。 JavaScript异步都是通过回调形式完成的,开发过程中一直在处理回调,可能不知不觉中自己就已经处在 回调地狱中。
pingan8787
2019/07/25
8420
【JS】239-浅析JavaScript异步
你真的懂异步编程吗?
在JS 代码中,异步无处不在,Ajax通信,Node中的文件读写等等等,只有搞清楚异步编程的原理和概念,才能在JS的世界中任意驰骋,随便撒欢;
西岭老湿
2021/01/12
8380
你真的懂异步编程吗?
前端架构师之01_JavaScript_Ajax
响应头用于告知客户端本次响应的基本信息,包括服务器程序名、内容的编码格式、缓存控制等。
用户9184480
2024/12/13
470
ajax未分装前JS代码形式
<script> // 创建XMLHttpRequest对象的实例(就是创建异步对象) var xhr = new XMLHttpRequest(); // 监听请求和响应的状态 xhr.onreadystatechange = function(){ // 表示请求完成 //状态等于4时响应完成,但页面404时仍可接收到响应,所以这里要status(页面状态)==200,既页面正常才给接收响应 if(xhr.readyStat
天天Lotay
2022/12/02
1K0
ajax未分装前JS代码形式
实用主义:Promise让异步回调更加优雅
前言 函数作为一等对象,使得javascript这种弱类型,单线程脚本语言的异步方法极为方便,只需要一个callback,编译器就能按照我们的想法执行命令。如果只有一个简单的异步操作,我们可以稍费脑子理清执行顺序,但是如果有多个异步方法,呃,我们就可能掉进了回调陷阱,事情远远没有我们想到的那么简单,并且我们甚至还没考虑过异步中抛出的错误。 还好Promise的出现,解救了我们,这篇文章不是讲解Promise的详细使用方法,只是通过两个例子,看看Promise的优雅之处,详细资料请参考阮一峰老师 《ES6标准
MrTreasure
2018/05/10
7380
原生AJAX请求教程
ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用。本质是在 HTTP 协议的基础上以异步的方式与服务器进行通信.
老马
2018/07/31
2.7K0
前端一些需要掌握的简单知识点
原生javaScript是中大公司挑人的核心,也是决定你未来发展高度的核心。 冒泡排序,快速排序,深度克隆,深度冻结,数组操作,本章都有。 走遍大江南北,还是原生javaScript最美 感冒给大家更新,希望大家多多点赞,谢谢! 下面是本人一些其他文章和学习的文档 , 全栈工程师一起加油! Node.js之快速搭建微信公众号服务器 Node.js之快速搭建服务器+前后端数据库session交互 ES6教程全篇 你该拥抱的TypeScript 快速排序算法 '这应该是最简单的快速排序实现,什么是快速排序呢?'
Peter谭金杰
2019/08/02
1.1K0
原生——ajax
什么是Ajax?(前后端数据交互) Asynchronous JavaScript and XML(异步JavaScript和XML)
FinGet
2019/06/28
2K0
js中的同步与异步
如果仅仅停留在文字上的理解,个人觉得有口无心,每当屡屡面试时,这都是一个常问的话题,牵扯到的是事件的执行顺序,任务队列,在js当中对于异步处理任务,是一个非常重要知识.
itclanCoder
2020/10/28
3.5K0
js中的同步与异步
使用Promise告别回调函数
主线程就是它整个的世界,所以在执行一项耗时的任务时,比如下载网络文件任务、获取摄像头等设备信息任务,这些任务都会放到页面主线程之外的进程或者线程中去执行,这样就避免了耗时任务“霸占”页面主线程的情况。
穿过生命散发芬芳
2025/01/31
880
异步编程Ajax的详解,并对其进行封装整理
对于Ajax,肯定很多小伙伴都听过甚至用过了,那么没听过的也不用着急,本文会对Ajax进行讲解,其次,一定还有一些人只用过JQuery封装好了的Ajax却对原生的Ajax并不了解,那么也不用着急,本文从最基本的Ajax开始讲起,然后最后会尽可能得模仿JQuery对其进行封装,让我刚才提到的两类人能对Ajax有进一步的了解。
@零一
2021/01/29
1.7K0
Web基础知识
响应头用于告知客户端本次响应的基本信息,包括服务器程序名、内容的编码格式、缓存控制等。
用户9184480
2024/12/13
1390
JavaScript 异步编程
众所周知,JavaScript 是单线程的,但异步在 js 中很常见,那么简单来介绍一下异步编程
Krry
2020/09/15
6080
es6 -- 透彻掌握Promise的使用,读这篇就够了
Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻。这篇文章的开头,主要跟大家分析一下,为什么会有Promise出现。
小蔚
2019/09/11
5050
一个兼容get请求和post请求的Ajax封装函数
今天在看某风网老师录制的 Ajax 函数封装的视频,get 和 post 请求都考虑到了,我在这里也做一下笔记。
德顺
2019/11/12
1.6K0
相关推荐
JS基础——异步回调
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验