感觉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回答

Scott

2018-02-05

这个 return 是在 tail(i + 1) 它的内部 return 了,而不是 return tail(i + 1),所以不影响最外层的这个执行过程

0
1
ShineTech
非常感谢!
2018-02-07
共1条回复

丶业精于勤

2018-02-05

每次执行函数,是当前这个作用域的i大于3返回,而不是最开始这个函数的返回,

当传入0时 依次执行 0 1 2 当 执行tail(2 + 1) 会直接返回, 从而进行console.log('修改后', i) 输出2 

可以通过IDE打断点看一下


0
0

Koa2框架从0开始构建预告片网站

Koa2+MongoDB+Parcel+Puppeteer+AntDesign快速搭建预告片网站

751 学习 · 362 问题

查看课程