为了账号安全,请及时绑定邮箱和手机立即绑定

js 中的回调函数和匿名函数的疑问?

js 中的回调函数和匿名函数的疑问?

RISEBY 2018-09-03 13:19:08
最近在看js匿名函数相关,以下代码的执行过程有些不解,请教大家执行过程是怎样的。var func = function(){}for (var i = 3; i >= 0; i--) {     func = function(cb, num){         return function (){                     console.log(num)                     cb()                 }     }(func, i)}func()以上代码执行结果是0 1 2 3请教下,cb既然是func,为何没有死循环?以及整体代码执行过程中都发生了什么。感谢大家!
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

把for()的四次循环展开其实会好理解一点。
变成如下代码:

func = function(cb, num){

        return function (){

                    console.log(num)

                    cb()

                }

    }(func, 3)

func = function(cb, num){

    return function (){

                console.log(num)

                cb()

            }

}(func, 2)

func = function(cb, num){

    return function (){

                console.log(num)

                cb()

            }

}(func, 1)

func = function(cb, num){

    return function (){

                console.log(num)

                cb()

            }

}(func, 0)

实际上循环是对func进行了四次赋值,你的输出结果中的0是

console.log(num)

的输出结果,而之后的1,2,3则是

cb()

的输出结果。
为什么cb()是func()却会输出1,2,3呢?是因为在上一次的赋值里
func()输出的是1,2,3 所以在一次的赋值中cb()输出1,2,3 在这之前,console.log()输出0。
这样就是为什么会输出0,1,2,3的结果的原因了。


查看完整回答
反对 回复 2018-11-01
  • 1 回答
  • 0 关注
  • 660 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信