美文网首页
关于JS中回调函数的个人理解

关于JS中回调函数的个人理解

作者: Jack_陈 | 来源:发表于2018-01-22 22:31 被阅读0次

    近期在看到jQuery中test(index,test)的用法涉及到回调函数,之前未有涉及,于今晚专门看看了看,将个人对于回调函数的理解感悟记录一下,有不正确的地方希望指出。

    回调函数(callback),英文中的解释其实更容易理解:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.下面我以拙劣的英文翻译下,回调函数是指函数b被当做函数a的参数使用,且当函数a执行完毕后才会执行函数a。

    这里说个题外话,异步async/同步sync

    举个栗子:

    1.异步:早上起来拉屎,擦屁股,这个肯定是要拉完屎才能擦屁股,不能一边拉屎一边擦屁股,这样擦屁股就没有任何意义,这就是异步。

    2.同步:早上起床,你可以坐在马桶上一边拉屎一边抠鼻屎,二者没有任何影响,可同时进行,上下通透,这就是 同步。

    来段异步代码示例:

    栗子 结果

    以上代码会先执行函数a,而且不会等到a中的延迟函数执行完才执行函数b, 在延迟函数被触发的过程中就执行了函数b,当js引擎的event 队列空闲时才会去执行队列里等待的setTimeout的回调函数,这就是一个异步的例子。

    所以即使,时间设置为0,也是会照样先执行函数b

    来段同步代码示例

    结果输出1

    print函数会等change函数完成之后去执行,所以结构输出为1,因为change函数修改了全局变量a的值,change执行之后才执行的print函数。

    回到回调函数的正题。下面再举个从其他博主那里看到的栗子(果然别人家的栗子好吃):

    举个现实的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。”对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。

    其实这就是一个回调的过程。你留了个函数b(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是函数a。她必须先回到家以后,函数a的内容执行完了,再执行函数b,然后你就收到一条信息了。

    这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。

    相信到这里大家已经对callback有一定的认识了,下面上代码:

    function  shit(clean_ass)   

    {      

       alert("我是函数shit");   

        alert("shit完我会调用clean_ass来清理我的菊花");   

        clean_ass();   

    }   

    function clean_ass(){   

    alert("我要清理我的菊花了");   

    }   

    function all_action(){

    shit(clean_ass);

    }

    这样你就完成了拉屎的动作(先拉屎,后清理菊花),如有疏漏之处,烦请指出。

    相关文章

      网友评论

          本文标题:关于JS中回调函数的个人理解

          本文链接:https://www.haomeiwen.com/subject/xywraxtx.html