关于函数默认参数++后遇到的问题?

下面是一个数组的递归遍历函数,而就只是一个i++和i+1的变化,就产生了两种结果,我不是很理解i++后i为什么不增长,有大佬可以解答一下吗?

/**
  数组遍历的递归写法
  @param {*} arr 需要遍历的数组
  @param {*} i 开始遍历的索引
*/
// 报错,调试的时候发现i一直都是0,++后i也是0,最后导致栈溢出
function bianArr(arr, i = 0) {
  if (arr == null || arr.length <= i) return
  console.log(arr[i])
  bianArr(arr, i++) // i++
}

// 不报错,i可以增加
function bianArr(arr, i = 0) {
  if (arr == null || arr.length <= i) return
  console.log(arr[i])
  bianArr(arr, i + 1) // i + 1
}

bianArr(arr)
阅读 1.4k
3 个回答

如果i正在参与表达式计算,i++会等表达式计算完成后+1,++i会先+1再参与表达式计算

i++ 当然会让 i 增长啊,但那也是 bianArr(arr, i++) // i++ 执行完后的事儿了

你换成 ++i 试试

i++是先赋值,再自增。

let i = 0
console.log(i++) // 0
console.log(i) // 1

这里你可以使用++i++i是先自增,再赋值。

let i = 0
console.log(++i) // 1
console.log(i) // 1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题