详解JS中的回调函数

JS中的回调函数对于入门者来说是不容易理解的,我在学习过程中也吃了它的苦头。学习JS一段时间过后,我也比较熟悉回调函数,现在把自己的心得分享出来。

那么,到底什么是回调函数呢?为什么JS中要有这个概念呢?

先举一个生活中的栗子:大家送女朋友回家,到了小区门口,对女朋友说到家了给我打个电话然后我在打车回去。等了五分钟,女朋友到家了,给你打电话,之后你也打车回家。

这个栗子中,你打车回家 就是 回调函数 。女朋友回家的过程,其实就一个异步函数,这个异步函数执行完毕之后,打电话(调用回调函数),然后执行回调函数(打车回家)

下面举一个JS代码栗子:

    var num = 0
    num++
    console.log(num)
    //输出结果为:1

加入异步函数之后:

    var num = 0
    
    setTimeout(function () {
        num++
    }, 3000)

    console.log(num)
    //输出结果为:0

按照我们原本的目的,输出结果应该为num=1,可为什么还是0呢?
因为JS是一种异步执行语言,尽管计时器中将num自加了,但是JS不会死等时间结束再跳出函数,而是马上就会执行下一步语句(也就是输出num),但这时候3秒钟根本就没结束,num还没有自加,所以输出结果还是0。

大家也许会想,将计时器时间设置为0,会不会有效呢?

    var num = 0

    setTimeout(function () {
        num++
    }, 0)
    
    console.log(num)
    //输出结果为:0

不管用的,不论计时器时间多少,只要它还是个异步函数,JS事件机制就会把它压进异步函数队列,先执行完同步函数(也就是一些普通的语句),再执行异步函数。

若是想让他输出为1,该怎么办呢?这就需要回调函数(callback)

    var num = 0

    setTimeout(function () {
        num++
        callback()
    }, 3000)

    function callback() {
        console.log(num)
    }
    //输出结果为:1

这里的callback函数名可以随意取,如果没有其他的含义,推荐用callback。

此时再想想最开始的栗子,计时器3000毫秒(女朋友回家的过程)后执行num++,再调用回调函数 callback() (给你打电话),输出num(你打车回家)。

如果你在这片文章收获到了你想要的东西,记得点个赞哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值