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
相关产品推荐
相关产品推荐

