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

《Eloquent JavaScript》第四章:tableFor函数中index +=2的逻辑疑问

为什么这段代码里要使用index +=2?

嘿,这个问题问得特别好!咱们一步步拆解这段代码的逻辑,就能明白index +=2的作用啦~

首先,这段代码里的table是一个4元素的数组,它其实是用来统计「目标事件(比如吃披萨)」和「结果(变成松鼠)」的四种组合情况,对应的关系是:

  • table[0]:既没发生目标事件,也没变成松鼠的次数
  • table[1]:发生了目标事件,但没变成松鼠的次数
  • table[2]:没发生目标事件,但变成了松鼠的次数
  • table[3]:既发生了目标事件,又变成了松鼠的次数

接下来看index的计算逻辑:

  1. 初始index = 0,对应「无事件、无松鼠」的场景
  2. 如果entry.events.includes(event)(目标事件发生了),就index +=1——这相当于把索引切换到「有事件」的分组(从0→1,2→3)
  3. 如果entry.squirrel(变成松鼠了),就index +=2——这相当于把索引切换到「有松鼠」的分组(从0→2,1→3)

你看,这两个操作刚好把两个布尔条件的四种组合,映射成了0-3四个唯一的索引:

事件发生?变成松鼠?index值对应table位置
否否0table[0]
是否1table[1]
否是2table[2]
是是3table[3]

结合你输出的结果[76, 9, 4, 1]来理解:

  • 76次:没吃披萨也没变成松鼠
  • 9次:吃了披萨但没变成松鼠
  • 4次:没吃披萨但变成松鼠
  • 1次:吃了披萨且变成松鼠

简单来说,index +=2是用「二进制位」的思路,把「是否变成松鼠」这个条件作为高位,和「是否发生事件」的低位组合,生成唯一的索引,从而用一个一维数组就能高效统计四种场景的次数,是不是很巧妙?


内容的提问来源于stack exchange,提问作者Kamil Staszewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:15