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

最近在看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,为何没有死循环?
以及整体代码执行过程中都发生了什么。感谢大家!


RISEBY
浏览 661回答 1
1回答

元芳怎么了

把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的结果的原因了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript