感觉tail递归函数永远也不会执行 console.log('修改后', i) 这段代码
来源:3-7 纯函数-尾递归与魔法大师 koa-compose

ShineTech
2018-02-04
function tail (i) { if (i > 3) return console.log('修改前', i) tail(i + 1) console.log('修改后', i) }
打眼一看,是每次执行递归调用 tail(i+1) 就又开启了一个新函数,当参数大于3的时候就直接return了,完全执行不到 console.log('修改后', i)这行代码啊。。。有点百思不得其解,望大神不吝赐教。
写回答
2回答
-
这个 return 是在 tail(i + 1) 它的内部 return 了,而不是 return tail(i + 1),所以不影响最外层的这个执行过程
012018-02-07 -
丶业精于勤
2018-02-05
每次执行函数,是当前这个作用域的i大于3返回,而不是最开始这个函数的返回,
当传入0时 依次执行 0 1 2 当 执行tail(2 + 1) 会直接返回, 从而进行console.log('修改后', i) 输出2
可以通过IDE打断点看一下
00
相似问题