同步(sync):刷牙、洗脸,不能同时进行
异步(async):洗脸、烧水,同时进行
把一个进程比作一个进度条
同步只有一个进度条,一个接着一个,刷完牙再洗脸。
异步有两个进度条,一个进度条用来洗脸,一个进度条用来烧水。
————————————————————————————————————————————————————————————————————————————————————————
function(){
console.log("执行a函数")
setTimeout(function(){
console.log("执行a的延迟函数",1500)
})
};
function(){
console.log("执行b函数")
};
a();
b();
最后的打印结果:
执行a函数
执行b函数
执行a的延迟函数
异步就是执行一个函数的同时不会死等延迟函数就执行。
————————————————————————————————————————————————————————————————————————————————————————
再例如:
var a = 0
function b(x) {
console.log(x)
}
function timer(time) {
setTimeout(function () {
a=6
}, time);
}
//调用:
console.log(a)//输出0
timer(3000)//time赋值为3000,执行延迟函数,使a变为6
b(a)//遗憾的是,a还是0,输出的结果0,a并没有变为6,是因为函数的执行不会死等延迟函数。
————————————————————————————————————————————————————————————————————————————————————————
而回调函数就能解决这个问题
首先解释一下回调函数的定义
回调函数是指一个函数作为参数被另一个函数调用。
例如a(b()),b()函数是a()函数的参数
执行顺序是:先执行a()函数,再返回来执行b()函数。
例:
function a() {
return 1
}
function b(a()) {
return 2 + a()
}
//调用:
var c=0
c = b(a()) //A是个函数,但它又作为一个参数在B函数中被调用
console.log© //结果显示3
————————————————————————————————————————————————————————————————————————————————————————
例:
var a = 0
function b(x) {
console.log(x)
}
function timer(time, callback) {
setTimeout(function () {
a = 6
callback(a);//此时这里多出了一个回调函数,按照上面的b(a())的a()函数作为b()函数的参数的原则,callback(a)函数作为timer()的参数,所以就先执行timer延迟,再执行力了回调函数。
}, time);
}
//调用:
console.log(a)//输出0
timer(3000,b)//a已经变成了6
b(a)//输出6