什么是回调函数?
admin
2024-01-29 01:23:19
0

1、什么是回调函数?

将函数B作为实参传递给函数A,那么把函数B称为回调函数,也称为高阶函数。

表示某个函数定义完成后并不会立即执行,而是在完成某些操作之后再来调用该函数

function B(){} //定义B函数
​
function A(args){} //定义A函数
​
A(B) //调用A函数,将函数B作为参数传递给A函数,将B函数称为回调函数

2、回调函数的使用

(1)先定义回调函数,在主调函数中传递回调函数的函数名

function print(num){console.log(num);
}
​
function add(n1,n2,callback){ //n1,n2是普通参数,callback是函数let s = n1 + n2callback(s)
}
add(12,23,print)//将print函数传递给形参callback,print函数就是回调函数

(2)定义匿名回调函数

function add(n1,n2,callback){ //n1,n2是普通参数,callback是函数let s = n1 + n2callback(s)
}
add(12,23,function(num){ //调用add函数时,给它传递一个匿名函数(该匿名函数就是回调函数)console.log(num);
})

3、回调函数的特点

(1)不会立即执行:在主调函数中执行回调函数时必须带'()',若有参数则需要传递参数

(2)回调函数是一个闭包:它可以访问主调函数中的变量

(3)执行前的类型判断:在主调函数中执行回调函数之前,建议判断回调函数是否是一个函数

function print(num){console.log(num);
}
function add(n1,n2,callback){ //n1,n2是普通参数,callback是函数let s = n1 + n2if (typeof callback === 'function') {callback(s)} else{console.log('第三个参数必须是函数');}
}
// add(12,23,print)
add(12,23,23)

4、回调函数中this指向的问题

function createData(callback){ //createData是主调函数,callback是回调函数callback()
}
​
let obj = {data:100,tool:function(){createData(function(){console.log(this,1111); //this指向window对象,为什么this指向window对象})}
}
obj.tool() //window 1111

(1)使用箭头函数

function createData(callback){ //createData是主调函数,callback是回调函数callback()
}
​
let obj = {data:100,tool:function(){createData(()=>{console.log(this,1111); //this指向obj对象})}
}
obj.tool() //{ data: 100, tool: [Function: tool] } 1111

(2)在调用回调函数之前,定义一个变量,将this保存起来

function createData(callback){ //createData是主调函数,callback是回调函数callback()
}
​
let obj = {data:100,tool:function(){let self = this //定义self将this保存起来createData(function(){console.log('回调函数:',self); //this指向obj对象})}
}
obj.tool() //{ data: 100, tool: [Function: tool] }

5、JavaScript中使用回调函数的原因

(1)JavaScript是一个事件驱动型的语言,在程序的执行过程中不会因为某一次的响应没有完成而停止程序,而是继续监听后续的事件,如果后续的某个事件被触发,则程序继续执行

相关内容

热门资讯

直击老百姓股东大会,谢子龙:面... 【大河财立方 记者 王鑫 长沙报道】6月18日下午,老百姓大药房连锁股份有限公司(以下简称“老百姓”...
外资集体唱多,岂是短期利好这么... 放下一周的交易疲惫,静下心,理性总结行情与问题。本篇为大家准备了4条要闻,覆盖当前市场核心动向,帮大...
原创 “... 老铁们,今天这盘面,不用看K线,看评论区就够了。 创业板、科创一举冲高,刷新阶段强势区间;上证这边却...
2026中国快消自有品牌价值进... 今天分享的是:2026中国快消自有品牌价值进阶之路研究报告-尼尔森IQ 报告共计:12页 这份尼尔森...
原创 秦... 兵马俑的全称应为秦始皇兵马俑,这一举世震惊的考古奇迹首次被发现于1974年,自那以后,它便成为中华文...
原创 反... 大家好,我是小毋。 一场看似针对性极强的产业链博弈,在今年的G7峰会上正式摆上台面。 一众西方发达国...
局势突变!刚刚,全线跳水!股市... 美伊谈判的变数搅动金融市场。 今日(6月19日)午间,日韩股市全线跳水,韩国KOSPI指数一度跌超2...
国际金价失守4200美元关口 图片来源:视觉中国 6月19日,国际黄金市场持续走弱,现货黄金价格盘中加速跳水,一举跌破4200美元...
装载8000万桶原油的超级油轮... 6月19日,财闻海外资讯消息,载有近8000万桶石油的超级油轮正停泊在波斯湾,一旦交易商和船东发出指...
原创 刚... 法国总统马克龙最近的状态,用一句哭笑不得来形容再贴切不过。原本他一门心思准备在对华贸易议题上做文章,...
惠誉:将宁德时代的发行人主体评... 6月18日,惠誉国际评级有限公司(下称“惠誉”)上调宁德时代(300750.SZ/03750.HK)...
临商银行“临商红”青年志愿服务... 为大力弘扬践行沂蒙精神,临商银行联合市委金融工委、市委市直机关工委、共青团临沂市委共同打造了“临商红...
SpaceX 上市:SPCX ... EBC Financial Group 自开盘起即向全球交易者提供双向交易通道,参与这一史上最大规模...
甘肃电气集团长开公司荣获202... 近日,在2026年度中国中压电器行业权威评选活动中,甘肃电气集团长开公司荣获中国中压电器市场“卓越贡...
是80%的工位面向海景,马岩松... 腾讯总部园区 摄影:张超 深圳大铲湾,腾讯总部园区“企鹅岛”于5月底首次面向公众开放。 三座由马岩松...
日本经济专家:加息难以扭转日元... 日本央行近日宣布将政策利率自0.75%上调至1.0%,为31年来最高水平。日本经济专家认为,目前日元...
黄金跌2%失守4130美元,白... 6月19日午间,黄金白银仍未止跌。截至13时,现货黄金跌2%,报4124.57美元/盎司,失守413...
原创 中... 2026年6月这个节点意味格外不同。4月伊朗与以色列那场脆弱的停火刚撑了不到两个月,6月8日两边又对...
Manus回购方案浮出水面:中... 文 | 强调Next 据外媒The Information6月18日报道,Manus的早期中国投资...
2026黄金回收避坑,郑州72... 来源:黄冈新闻网 一、郑州黄金回收市场现状与高价引流投诉占比 据郑州市 12315 消费维权平台 2...