一、什么是函数回调?
函数回调就是,一个函数被另一个函数作为参数调用,这就叫做函数回调,下面演示一个简单的函数回调:
function myDisplay(rel){
document.getElementById("pa").innerHTML += rel;
}//声明函数显示计数的结果
function myCounter(num1,num2,myFunctionMe){
var counter = num1 + num2;
myFunctionMe(counter);
} //这个函数数就运用到了回调,在参数中定义了第三个就是函数。
myCounter(4,6,myDisplay);
//注意当函数作为参数传入的时候不用加括号,加括号是执行函数
在这个例子中myCounter函数就需要一个函数作为参数来处理两个数相加的结果,这时候我们传入的函数是对一个数加入到html标签体中,这样一结合就实现了两数之和的输出。
- 那么问题又来了,当我们要传入的作为参数的函数有自己的参数需要传递,而函数作为参数又不能加括号,这我们应该如何解决?留个悬念,会在异步中解决。
二 、什么是异步函数?
异步函数就是当自身函数在执行的过程中又不会阻塞其他函数的运行,达到并行的效果,这叫异步。
最典型的异步函数就是setTimeout了,下面演示一下,延迟三秒,在页面展示内容的代码:
function timeOutText(yourText){
document.getElementById("pa").innerHTML += yourText;
}
//执行延时函数,让五秒后,再执行上面的函数
setTimeout(function(){timeOutText("坚持每天重复一件有益自己的事情,就一定会有所提升");}, 5000);
//再随便写点式子看上面的函数在执行过程中是否影响到了下面式子的运行
document.getElementById("pa").innerHTML += "测试用的文本";
最后结果是先显示"测试用的文本",然后过了五秒之后,才执行了写入标签的文本,这就看出setTimeout函数的异步性,其执行的过程中并不影响其他函数或逻辑代码执行。
- 上面的异步函数是和函数回调结合在一块使用的,中间也解释了上面提到的疑问。望细读。
- 像setTimeout这样的异步函数还有:setInterval(函数,时间),间隔多久执行一次参数中的函数。
三、特殊的回调函数Promise()
这个回调函数允许传入两个函数作为参数,这两个函数分别处理Promise函数中逻辑处理成功与否的不同结果。具体例子见下:
//创建Promise然后确定传入参数的函数及这些函数的使用场景
var myPromise = new Promise(function(myWin,myErro){
//写到页面一些内容
var text = "疯子";
//检查文本如果不是疯狂执行myErro的错误逻辑函数,如果是执行正确myWin函数
if(text == "疯狂"){
myWin(text);
}else{
myErro(text);
}
});
//让我们自定义的Promise运行需要传入具体参数函数,要利用Promise的then函数执行
myPromise.then(
function(re){document.getElementById("pa").innerHTML = re;},
function(re){ alert("您输入的文本是" + re +"不是疯狂所以不能添加");}
);