javascript - 关于js回调函数的一些问题
迷茫
迷茫 2017-04-11 13:07:12
[JavaScript讨论组]
var a = 0,
    b = 20
function add(num,callback){
      setTimeout(function(){
            if(num==10||num==30){
                  callback&&callback()
            }else{
                  num++
                  console.log(num)
                  add(num,callback)
            }
      },1000)
}
add(a,add(b))

这段代码是想先让a加到10,然后让b加到30。但是运行结果是1 21 2 22 3 23...,这个函数的执行流程不太理解,另外我把最后一句代码修改成这样,执行效果就是正确的。刚刚学js不久,想不出这个问题怎么回事,恳请大家帮我解答这个问题。

add(a,function(){
      add(b)
})//1 2 3 .... 10 11 12 13...30
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
阿神

你可以从你的结果就可以看出 add(num,callback)的时候callback就执行了。
回调函数的callback是不能加()的,或者写一个匿名函数把加括号的函数包起来。
如:add(a,callback),但是你的callback是其本身,所以就需要像你的第二种写法,将起包起来,相当于传入函数整体。
当需要到callback时才执行,不能像第一种写法,执行add的时候就已经把callback执行了。

大家讲道理

add(a,add(b)) 第二个参数明显就是被你直接调用了,回调函数,顾名思义

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号