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

JavaScript中forEach()参数顺序规则及代码运行疑问

关于Array.forEach回调参数的疑问解答

核心结论

JavaScript中Array.forEach()方法的回调函数,参数传递顺序是固定的,和你给参数起的名字无关:

  • 第一个参数:当前遍历到的 元素值
  • 第二个参数:当前元素的 索引
  • 第三个参数(可选):正在遍历的 原数组

分析你的两种写法

第一种写法(正常运行)

var array = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
    19, 300, 3775, 299, 36, 209, 148, 169, 299,
    6, 109, 20, 58, 139, 59, 3, 1, 139];

function addHundredIfDivisionBY3Possible (element , i){
    if (element % 3 === 0) {
        array[i]= (element +=100) ;
    }
}

array.forEach(addHundredIfDivisionBY3Possible);
console.log(array);

这里的参数element在第一个位置,刚好接收forEach传递的元素值;i在第二个位置,接收索引。逻辑和参数传递匹配,所以能正确给所有能被3整除的元素加100。

第二种写法(运行异常)

// 希望参数'element'是索引,参数i是元素值
function addHundredIfDivisionBY3Possible (element , i){
    if (i % 3 === 0) {
        array[element]= (i +=100) ;
    }
}

你误以为参数名决定了接收的内容,但实际上:

  • element在第一个位置,依然接收元素值,不是索引
  • i在第二个位置,依然接收索引,不是元素值

比如遍历第一个元素12时,element拿到的是12(元素值),i拿到的是0(索引)。此时i%3===0成立,执行array[12] = 0+100,把数组第13个位置的元素改成100,完全偏离了你“给索引能被3整除的元素加100”的预期,所以运行结果不符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:55:21