元芳怎么了
把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的结果的原因了。