You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中return语句里的后置++为何先返回值再自增?

关于cycleIterator函数中索引使用的疑问解答

先看你的代码:

function cycleIterator(arr) {
    let indexCounter = 0;

  return function() {
    
    if (indexCounter >= arr.length) indexCounter = 0;
    return arr[indexCounter ++];    //WHY IS THIS [0, 1, 2] NOT [1, 2, 3]
  }
}

// Uncomment these to check your work!
const threeDayWeekend = ['Fri', 'Sat', 'Sun'];
const getDay = cycleIterator(threeDayWeekend);

console.log(getDay()); // should log: 'Fri'
console.log(getDay()); // should log: 'Sat'
console.log(getDay()); // should log: 'Sun'
console.log(getDay()); // should log: 'Fri'

核心原因是后置自增运算符++的执行逻辑:它会先返回变量当前的数值,再把变量的值加1。结合代码执行流程拆解来看:

  • 初始状态:indexCounter被初始化为0。
  • 第一次调用getDay():
    1. 判断indexCounter(值为0)是否大于等于数组长度3?不满足,不执行重置。
    2. 执行arr[indexCounter++]:先取indexCounter当前的0作为索引,返回arr[0]也就是'Fri',之后indexCounter才会变成1。
  • 第二次调用getDay():
    1. indexCounter的值是1,小于3,不重置。
    2. 取indexCounter当前的1作为索引,返回arr[1]即'Sat',之后indexCounter变成2。
  • 第三次调用getDay():
    1. indexCounter的值是2,小于3,不重置。
    2. 取indexCounter当前的2作为索引,返回arr[2]即'Sun',之后indexCounter变成3。
  • 第四次调用getDay():
    1. indexCounter的值是3,等于数组长度3,触发重置,把indexCounter设为0。
    2. 取indexCounter当前的0作为索引,返回arr[0]即'Fri',之后indexCounter变成1。

另外要注意,数组索引从0开始,arr[3]已经超出threeDayWeekend的范围,会返回undefined,完全不符合循环取元素的需求,所以用0、1、2的索引才是正确的。

内容的提问来源于stack exchange,提问作者Logan Nelsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:43:23