关于js回调函数的一些问题

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.5k
2 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题