JS 对于回调函数的理解,和常见的使用场景应用,使用注意点
2024-08-29 23:43:24
-
很经常我们会遇到这样一种情况:
例如,你需要和其他人合作,别人提供数据,而你不需要关注别人获取或者构建数据的方式方法。
你只要对这个拿到的数据进行操作。
这样,就相当于我们提供一个外在的函数,别人调用这个函数,返回相应的数据。
例如:
12345678function (num , numFun) {
if
(num <
10
){
//do sth
}
else
{
//do sth
numFun();
}
}
在num的判断之后执行NumFun的函数。
所谓的回调函数,可以这样理解,它是为了实现这样一个目的:
draw方法是一个绘图的函数
现在我们调用这个draw方法,希望在图形绘制完成之后,我们能够进行相应的操作,为了保证这个操作是在绘图完成之后调用的。
我们就采取这样一种方法,将fun作为参数传递进draw,然后再draw函数执行完成之后,调用这个传递的fun方法
1234567891011121314151617function draw(beforeDraw, afterDraw) {
beforeDraw();
//绘图
//dosth
afterDraw();
}
//别人调用
draw(function(){
alert(
'绘图之前执行'
);
//绘图之前,do sth
},
function(){
alert(
'绘图之后执行'
);
//绘图之后,do sth
})
当然利用这种思想,我们可以在很多地方有很巧妙的使用:
比如之前举得例子
你只关注数据的返回值,不关注别人调用这个方法是怎么操作的。
方法1:
就可以利用回调函数的思想,定义方法传入的参数为函数,别人调用是,在函数参数中执行相应的操作,然后返回你所需要的值:
12345678var drawBase = {
init : function (getdata){
var mydata = getdata();
$(
'#testID'
).bind(
'click'
, function(e){
//利用mydata进行绘图操作
})
},
}
//别人在调用你这个函数时候,传入的参数为函数,函数中进行操作后返回相应的值
12345drawBase.init(function () {
//do sth
一系列操作之后
return
data;
})
方法2、
你也可以,先定义一个空方法,然后别人再去重写这个方法,进行一系列的操作之后,返回相应的数据
然后我们使用时候,就可以拿到这个返回的数据了:
Exp:
123456789var drawBase = {
getdata = { },
init : function () {
$(
'testID'
).bind(
'click'
, function () {
var data = drawBase.getdata();
//使用data进行你所需要的操作
})
}
}
//别人调用时候,就需要重写这个方法
1234drawBase.getData = function () {
//一系列操作,得到data,
return
data;
}
这两种方法可以这样理解:
方法一,绑定事件和操作,是在别人调用时候才做的,因此那个时候getdata()的方法是已知的可以直接绑定
方法二,绑定的事件和操作,是之前进行的,此时不知道getdata()的方法,因而给定一个空的方法定义,在别人调用重写后,就可以拿到相应的数据
这个是我个人的一些看法~
Exp:
12345678var stu={
init : function(callback){
//TODO ...
if
(callback && (callback
instanceof
Function){
callback(
'init...'
);
//回调
}
}
};
别人调用,传入函数参数:
123stu.init(function(){
//这就是回调了...
});
加油!
最新文章
- 学习Maven之Maven Clean Plugin
- animate支持的css属性
- Spark机器学习读书笔记-CH04
- 在已有 Ubuntu 的基础上硬盘安装 Win7 实现双系统
- C#函数式编程之可选值
- BSA基础数据维护
- 关于网卡eth0、eth1以及服务器为什么要把内网和外网卡区分开
- 如何在cocos2dx lua的回调函数里面用self
- sql server 修改表的默认值, 需要先删除约束条件
- Spring简单的文件配置
- MySQL 文章目录
- [零] JavaIO入门简介 程序设计语言 为什么需要IO库
- eclipse创建spring boot项目,tomcat启动成功,但http://localhost:8080无法访问报错404解决方案
- qrcode.js 动态生成二维码
- 百度富文本编辑器整合fastdfs文件服务器上传
- Mathmatica简介
- Python基础知识:字典
- MyBufferedReader
- Jenkins 学习笔记(一)
- CMD命令行窗口 复制黏贴
热门文章
- 关于myeclipse导入项目时出现的中文注释乱码问题
- 【Java】深入理解Java中的spi机制
- jstack的使用方法
- angular 学习笔记(3) ng-repeat遍历json并且给样式
- iis6.0 建立站点
- Spring 的AOP
- uvm_dpi——DPI在UVM中的实现(一)
- java cpu使用率高异常排查
- jq动态增加的button标签click回调失效的问题,即动态增加的button标签绑定事件$(";button.class";).click(function)无效
- 在vue-cli中使用路由